【Flutter】DateTimeとTimestampについて

flutter

はじめに

DatetimeTimestampを扱う機会が増えたので備忘録としてここに記載します。

DateTime

DateTimeとは

  • 時間を表すDartの型
  • エポック (1970-01-01 UTC) から最大 100,000,000 日離れた時刻値を表すことができる

DateTimes can represent time values that are at a distance of at most 100,000,000 days from epoch 

公式(https://api.flutter.dev/flutter/dart-core/DateTime-class.html)

エポック秒とは、1970年1月1日午前0時0分0秒(UTC)」からの経過秒数で表現する時間の表現方法です。

また、UCTとは協定世界時で日本時間から9時間引いた時間のことです。

私の理解としては、DateTime型とはプログラム的に表現するための時間を表す型の認識です。

使い方

現在を表す

  var now = DateTime.now();
  print(now); // 2023-08-16 15:21:26.852271

指定時間を表す

  var sometimes = DateTime(2023, 5, 5, 50, 50);
  print(sometimes); //2023-05-07 02:50:00.000

月だけを取得

   var now = DateTime.now();
   print('${now.month}月'); // 8月

Timestamp

Timestampとは

  • タイムゾーンやカレンダーに依存しない時点を表し、UTC エポック時間のナノ秒の解像度で秒および秒の端数として表されますもの

A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time

公式(https://pub.dev/documentation/cloud_firestore_platform_interface/latest/cloud_firestore_platform_interface/Timestamp-class.html)
  • 「1638592424384」のように時間を数字に置き換えたもの

私の理解としては、エポック時間を数字で表したものの認識です。
また、Firebaseで表示される際は2023年8月1日9:30:38 UTC+9 のようで表示されます。

現在を表す

int timestamp = DateTime.now().millisecondsSinceEpoch;
print(timestamp); // 1638592424384

DateTimeからTimestampへ

Firebaseからデータを引っ張ってきたりするときに変換することがあるかと思います。

   Timestamp now = Timestamp.fromDate(DateTime.now());
   print(now); //Timestamp(seconds=1692168676, nanoseconds=96173000)

TimestampからDateTimeへ

逆も然りでたまに使用することがあると思います。

    Map<String, dynamic> map = {'date': Timestamp.now()};
    DateTime now = map['date'].toDate(); 
    print(now); //2023-08-16 15:55:51.156492

参考サイト

Flutter/Dart DateTimeチートシート
【Flutter】FirestoreのTimestampとDartのDateTimeの日付とタイムスタンプの相互変換の方法について - Qiita
はじめにやりかた忘れるのでメモしておきます。Timestamp から DateTime への変換Map<String, dynamic> map = ... // firestoreからのドキ…

最後に

まだ深く理解できていない部分があるのでさらに理解を深めて詳細を記載できればと思います。
指摘等あればぜひコメントください。

ではまた。

コメント

タイトルとURLをコピーしました