如何使用颤振将时间戳从 Firebase 转换为 DateTime

Posted

技术标签:

【中文标题】如何使用颤振将时间戳从 Firebase 转换为 DateTime【英文标题】:How to convert Timestamp to DateTime from firebase with flutter 【发布时间】:2020-09-19 08:45:36 【问题描述】:

我在 Firebase 中有时间戳项目。我从飞镖代码时间戳类型中获取项目。 它显示为“时间戳(秒=1590903768,纳秒=26999000)”。

我想仅在我的申请中显示日期,例如“2020-06-01”或“06-01”。

请给我建议。

【问题讨论】:

我不是飞镖专家,但这有帮助吗? ***.com/questions/16126579/… 这个页面应该有帮助:***.com/questions/52996707/… ***.com/questions/50632217/… 【参考方案1】:

您可以将Timestamp DataType 转换为DateTime,然后根据您的要求格式化 DateTime。

示例

在您的 dart 文件中添加以下方法。

String formatTimestamp(Timestamp timestamp) 
  var format = new DateFormat('y-MM-d'); // <- use skeleton here
  return format.format(timestamp.toDate());

然后从 FireStore 中获取 TimeStamp 并将其传递给此方法

print(formatTimestamp(doc.data['timestamp']));

输出

2021/01/11

其他可用格式,请使用 Skeleton 格式化。

 ICU Name                   Skeleton
 --------                   --------
 DAY                          d
 ABBR_WEEKDAY                 E
 WEEKDAY                      EEEE
 ABBR_STANDALONE_MONTH        LLL
 STANDALONE_MONTH             LLLL
 NUM_MONTH                    M
 NUM_MONTH_DAY                Md
 NUM_MONTH_WEEKDAY_DAY        MEd
 ABBR_MONTH                   MMM
 ABBR_MONTH_DAY               MMMd
 ABBR_MONTH_WEEKDAY_DAY       MMMEd
 MONTH                        MMMM
 MONTH_DAY                    MMMMd
 MONTH_WEEKDAY_DAY            MMMMEEEEd
 ABBR_QUARTER                 QQQ
 QUARTER                      QQQQ
 YEAR                         y
 YEAR_NUM_MONTH               yM
 YEAR_NUM_MONTH_DAY           yMd
 YEAR_NUM_MONTH_WEEKDAY_DAY   yMEd
 YEAR_ABBR_MONTH              yMMM
 YEAR_ABBR_MONTH_DAY          yMMMd
 YEAR_ABBR_MONTH_WEEKDAY_DAY  yMMMEd
 YEAR_MONTH                   yMMMM
 YEAR_MONTH_DAY               yMMMMd
 YEAR_MONTH_WEEKDAY_DAY       yMMMMEEEEd
 YEAR_ABBR_QUARTER            yQQQ
 YEAR_QUARTER                 yQQQQ
 HOUR24                       H
 HOUR24_MINUTE                Hm
 HOUR24_MINUTE_SECOND         Hms
 HOUR                         j
 HOUR_MINUTE                  jm
 HOUR_MINUTE_SECOND           jms
 MINUTE                       m
 MINUTE_SECOND                ms
 SECOND                       s

我希望这会有所帮助!

【讨论】:

保存在 Firestore 上的实际时间戳是 13-Nov-21,但使用此代码后,显示的日期是 13-10-21(13-Oct-21)。如何解决这个问题..?? @Madhav 请从 Firebase 控制台检查您的 Firestore 数据库并验证一次日期,因为此代码将 TimeStamp 转换为 DateTime 并且只是格式化,它工作正常。如果您仍然对此代码有疑问,请创建新问题,提供有关您的代码的更多信息并在此处分享链接,以便我为您提供帮助! 我得到了答案,DateFormat('d-MM-y') 将显示 11 月为 10,而 Jan 显示为 0,因为计数从 0 开始。所以,我改用 DateFormat('d-MMM-y'),它显示 13-Nov- 21,而不是 13-10-21。 @Madhav 谢谢Madhav,我也不知道这个日期计数系统。【参考方案2】:

你从 firestore 取回了一张地图。假设您已将其命名为“creationDate”,您可以使用 toDate() 飞镖函数将返回的时间戳转换为 DateTime 对象。格式化日期时间的“最简单”方法是使用 intl 包

// Map From firestore
Map data = documentSnapshot.data();
var creationDate = data['creationDate'].toDate();

//Format using intl package
DateFormat _dateFormat = DateFormat('y-MM-d');
String formattedDate =  _dateFormat.format(dateTime);

【讨论】:

【参考方案3】:

Timestamp 类有一个 toDate 函数,可将其转换为 DateTime 对象。请参阅this 了解更多信息。现在,使用 intl 包格式化程序可以更轻松地完成将其转换为字符串时想要进行的任何格式化。

例子:

Timestamp stamp = Timestamp.now();
DateTime date = stamp.toDate();

【讨论】:

以上是关于如何使用颤振将时间戳从 Firebase 转换为 DateTime的主要内容,如果未能解决你的问题,请参考以下文章

Python:如何将日期时间/时间戳从一个时区转换为另一个时区?

使用 sql 查询将元数据库中的预配置时间戳从 utc 格式转换为 ist

Qt 时间戳从 Epoch(1970) 到 2000 年开始的 Postgresql 时间戳。如何添加偏移量并将毫秒转换为微秒?

颤振-如何将 Map<dynamic.dynamic> 转换为 List<String>

如何使用颤振将视频添加到 Firebase 数据库

如何将数据作为子集合添加到firebase颤振中的所有用户文档?