## 해당 TIL은 주어진 과제를 수행하면서 얻은 학습 내용과, 시행착오 등등을 종합해서 작성한것임
1. 파이어베이스에 시간 저장하기
파이어베이스를 이용할때, 시간을 저장하는 방법은 크게 2가지로 나뉜다.
파이어베이스의 기준을 따르느냐, 플러터(다트)의 기준을 따르느냐.
파이어베이스는 시간을 저장하는 방식으로 TimeStamp라는 규격을 사용한다.
< 파이어베이스 - TimeStamp >
반면, 플러터(다트) 는 시간을 다룰때 DateTime 이라는 자료형을 사용한다.
DateTime currentTime = DateTime.now();
DateTime class - dart:core library - Dart API
DateTime class An instant in time, such as July 20, 1969, 8:18pm GMT. DateTimes can represent time values that are at a distance of at most 100,000,000 days from epoch (1970-01-01 UTC): -271821-04-20 to 275760-09-13. Create a DateTime object by using one o
api.flutter.dev
즉, 파이어베이스의 데이터를 그대로 들고오게되면, 플러터는 그걸 제대로 이용하지 못한다.
따라서, 시간을 다룰때는 파이어베이스의 TimeStamp를 이용할지, 그냥 DateTime를 String형태로 저장하게 할지 선택해야 한다.
- TimeStamp를 이용하기
우선 파이어베이스의 TimeStamp를 String으로 변환하는 방법부터 알아보자.
해당 방법을 사용하기 위해서는 intl 라이브러리가 필요하다.
DateFormat.yMMMMd('ko_KR').add_jm().format(data?['date'].toDate()),
// xxxx년xx월xx일오후x:xx 형태로 출력
- DateTime을 이용하기
나는 intl 라이브러리를 설치하기도 싫고, 저런 복잡한 변환을 시키기도 싫다 하면,
플러터의 DateTime를 String으로 변환하여 파이어베이스에 저장, 출력하는 방식을 사용하는것도 괜찮다.
DateTime update_date,
// 파이어베이스에 저장시 (DateTime -> String)
>> update_date.toIso8601String()
Future<bool> insert(
{required DateTime update_date) async {
try {
FirebaseFirestore firestore = FirebaseFirestore.instance;
CollectionReference collectionRef = firestore.collection('chatroom');
final docRef = collectionRef.doc(chatroom_id);
final map = {
"update_date": update_date.toIso8601String(),
};
await docRef.set(map);
return true;
} catch (e) {
return false;
}
}
// 파이어베이스에서 받아올시 (String -> DateTime)
ChatroomModel.fromJson(Map<String,dynamic> json) : this (
update_date : DateTime.parse(json['update_date']),
);
'TIL' 카테고리의 다른 글
TIL - 지역 검색 앱(4) <파이어베이스 DB - Update 심화, 스트림 연결하기> (0) | 2024.12.05 |
---|---|
TIL - 지역 검색 앱 (3) <AlertDialog의 context, 파이어스토리지에 에셋이미지 업로드하기> (0) | 2024.12.04 |
TIL - 지역 검색 앱 (1) <RiverPod의 로직 순서> (0) | 2024.12.02 |
Flutter 이주의 위젯 탐방 (5) - FadeInImage, StreamBuilder, InheritedModel (0) | 2024.11.27 |
TIL - SirenOrder(팀프로젝트) (2) <애니메이션 기초, precacheImage> (0) | 2024.11.25 |