首页 > 解决方案 > 如何将 Firestore 时间戳打印为格式化的日期和时间

问题描述

我的时间戳Timestamp(seconds=1560523991, nanoseconds=286000000)在 Flutter Firestore 快照中返回。

我想将其打印为格式正确的日期和时间。

DateTime.now()在创建新记录并使用 Firestore 快照检索它时将当前 DateTime 存储在 Firestore 中,但我无法转换为格式化的日期时间。我正在使用 libintl.dart进行格式化。

保存数据的代码

       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));
    });

Accessing with 

    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())]);


....

抛出的错误是

日期格式无效。

我期待输出是:'Jan 17, 2019, 2:19 PM'

标签: timeflutterdartgoogle-cloud-firestore

解决方案


当我们将DateTime对象推送到 Firestore 时,它​​会在内部将其转换为自己的时间戳对象并存储它。

从 Firestore 获取时间戳后将其转换回 Datetime 的方法:

Firestore 的时间戳包含一个名为toDate()的方法,该方法可以转换为 String,然后可以将该 String 传递给DateTimeparse方法以转换回DateTime

DateTime.parse(timestamp.toDate().toString())

推荐阅读