web-dev-qa-db-ja.com

Firestoreのタイムスタンプをフォーマットされた日付と時刻としてフラッターに出力する方法

タイムスタンプがフラッターファイアストアスナップショットのaa Timestamp(seconds=1560523991, nanoseconds=286000000)を返す

適切にフォーマットされた日付と時刻を印刷したい

DateTime.now()を使用して新しいレコードを作成し、Firestoreスナップショットを使用して取得しながら、現在のDateTimeをFireStoreに格納しますが、フォーマットを返します

データを保存するためのコード

d={'amount':amount,
  'desc':desc,
  'user_id':user_id,
  'flie_ref':url.toString(),
  'date':'${user_id}${DateTime.now().day}-${DateTime.now().month}-${DateTime.now().year}',
  'timestamp':DateTime.now()

return Firestore.instance.collection( '/ data')。add(d).then((v){return true;})。catchError((onError)=> print(onError)); });

にアクセスする

FutureBuilder(
              future: Firestore.instance
                  .collection('data')
                  .where('user_id', isEqualTo:_user_id)
                  .getDocuments(),
              builder: (BuildContext context,
                  AsyncSnapshot<QuerySnapshot> snapshot) {
                if (!snapshot.hasData)
                  return Container(
                      child: Center(child: CircularProgressIndicator()));
                return ListView.builder(
                    itemCount: snapshot.data.documents.length,
                    itemBuilder: (BuildContext context, int index) {
                      return Column(
                        children: <Widget>[
   Text(DateFormat.yMMMd().add_jm().format(DateTime.parse(snapshot.data.documents[index].data['timestamp'].toString())]);
....

エラースローは無効な日付形式です。

出力は「2019年1月17日、午後2時19分」と予想しています。

3
aryan singh

ここが道です!

FirestoreはTimestamp(seconds = 1560523991、nanoseconds = 286000000)のようなTimeStampを返します。

これは次のように解析できます

Timestamp t = document['timeFieldName'];
DateTime d = t.toDate();
print(d.toString()); //2019-12-28 18:48:48.364

次のように、Firestoreタイムスタンプオブジェクトを直接DateTimeに変換できます。

DateTime myDateTime = (snapshot.data.documents[index].data['timestamp']).toDate();

これにより、FirestoreのタイムスタンプがDartのDateTime形式で返されます。 DateTimeオブジェクトを変換するには、_ intl パッケージのDateFormatクラスを使用できます。取得したDateTimeオブジェクトを使用して、次のような選択した形式を取得できます。

DateFormat.yMMMd().add_jm().format(myDateTime);

このコードは、次のような出力を生成します。

Apr 21, 2020 5:33 PM
0
Ashutosh Singh

そうする:

DateFormat.yMMMd().add_jm().format(DateTime.parse(snapshot.data.documents[index].data['timestamp'].toDate().toString())]
0
Jaycee

DateTimeをFirestoreに送信しても、FirestoreからUNIXタイムスタンプを取得します。

DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);を使用して、FirestoreからDateTimeを解析できます

DateTimeクラスには、文字列を返す2つのオプションがあります。 toIso8601String()またはtoString()必要なものを選択します。または例を使用します。 DateTime.now()。hour;を取得して独自の出力を作成します。

詳細については、次を確認してください https://api.dartlang.org/stable/2.4.0/Dart-core/DateTime-class.html

0
worldpotato