티스토리 뷰
[Flutter] 서버에서 시간을 받아서 원하는 string으로 포맷팅해주기 (with DateTime, DateFormat)
eungding 2020. 10. 30. 12:08[1] 장고
장고에서 내려주는 DateTime fomat은 iso-8601 입니다.
(참고: www.django-rest-framework.org/api-guide/fields/#datetimefield )
예를 들어
"2020-10-10T14:58:04+09:00"
이런식으로 값을 내려줍니다.
iso-8601 포맷의 각 필드에 대한 설명은 이 블로그에서 참조해주세요~
[2] 플러터
2.1 DateTime
다트에서 시간을 표현하는 타입은 DateTime 입니다.
문서를 보면 DateTime만들기, DateTime에서 시,분, 초 구하기 등등이 엄청 간단하게 잘되어있어요 (감동)
(swift에서는 extension으로 만들어서 썼었는데,,)
2.2 DateTime의 parse 메소드
저는 formattedString을 DateTime으로 바꿔주는 parse 메소드를 사용해줄 것입니다!
이 메소드는 subset of ISO 8601 을 파싱할 수 있다고 합니다.
예를들어 아래와 같은 ISO 8601 포맷의 스트링을 파싱할 수 있습니다.
만약 input string을 파싱할 수 없으면 FormatException 을 던진다고 합니다.
저는 장고에서 이런식으로 json을 내려줘서
{"create_date":"2020-10-10T14:58:04+09:00"}
이렇게 DateTime을 구했습니다.
DateTime createdDate = DateTime.parse(json["create_date"]);
2.3 DateFormat
DateTime을 이렇게 멋진 영어 string으로 fomatting해서 보여주고 싶다면 어떻게 해야할까요-?!
DateFormat 을 살펴보면 됩니다.
DateFormat을 만들고 format이라는 메소드에 DateTime을 넣어주면 formatted string을 구할 수 있습니다.
자신이 원하는 패턴이랑 나라(locale)를 넣어서 직접 DateFormat을 만들 수 도 있고
내장된 생성자들을 편하게 쓸 수 도 있어요
아래 예제처럼 이미 내장된 생성자를 쓰면
편하게 DateTime을 포맷팅 할 수 있답니다.
그리고 locale은 지정안해주면 디폴트값이 en_US입니다.
그럼 저의 예제에서 써볼게요-!
우선 DateFormat은 intl 패키지 안에 있기때문에
import를 먼저 해줍니다.
import 'package:intl/intl.dart';
저는 yMMd 패턴으로 DateFormat을 만들고
아까 구한 DateTime을 포맷팅해줬습니다.
DateTime createdDate = DateTime.parse(json["create_date"]);
String createdDateString = DateFormat.yMMMd('en_US').format(createdDate);
print(createdDateString); // Oct 4, 2020
그래서 최종 Question 모델 코드는 이렇게 완성되었습니다.
import 'dart:convert';
import 'package:intl/intl.dart';
class Question {
String id;
String title;
String createdDateString;
Question({
this.id,
this.title,
this.createdDateString
});
Question.fromJson(Map<String, dynamic> json) {
id = json["id"];
title = json["title"];
DateTime createdDate = DateTime.parse(json["create_date"]);
createdDateString = DateFormat.yMMMd('en_US').format(createdDate);
}
}
'🤼♀️ > Flutter' 카테고리의 다른 글
[Flutter] Device에서 앱 relaunch가 안될때 빌드 모드를 확인하기 (0) | 2020.11.08 |
---|---|
[Flutter] Clipboard를 이용해 텍스트를 복사하기 (0) | 2020.10.30 |
[Flutter] Firebase Cloud Messaging 연동 + 파베 콘솔에서 푸쉬보내기 (2) | 2020.10.23 |
[Flutter] Serializing JSON inside model class (0) | 2020.10.16 |
[Flutter] Spacer로 adjustable한 empty spacing을 만들기 (0) | 2020.10.15 |
- Total
- Today
- Yesterday
- drf custom error
- Flutter Spacer
- flutter dynamic link
- ipad multitasking
- SerializerMethodField
- flutter deep link
- Python Type Hint
- Dart Factory
- flutter build mode
- 플러터 얼럿
- PencilKit
- Flutter getter setter
- flutter 앱 출시
- METAL
- Flutter Clipboard
- Flutter Text Gradient
- Sketch 누끼
- Django Firebase Cloud Messaging
- Django Heroku Scheduler
- DRF APIException
- 장고 Custom Management Command
- Watch App for iOS App vs Watch App
- github actions
- cocoapod
- 플러터 싱글톤
- ribs
- 구글 Geocoding API
- 장고 URL querystring
- Flutter 로딩
- Django FCM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |