Flutter Cloud Firestore 将 serverTimestamp 转换为 String

Posted

技术标签:

【中文标题】Flutter Cloud Firestore 将 serverTimestamp 转换为 String【英文标题】:Flutter Cloud Firestore convert serverTimestamp to String 【发布时间】:2020-01-16 15:09:51 【问题描述】:

我的颤振应用程序需要获取当前时间,我已经为此尝试了几个包:truetime、ntptime、dart 中的 Datetime、cloud firestore 中的 Timestamp.now,它们在手机设置中切换时区时都返回不同的时间.唯一的方法是它为所有时区的所有设备返回相同的时间是 FieldValue.serverTimestamp() 方法,我将此值保存到 firestore 文档中,并在那里将其识别为时间戳类型的字段。

我想把它转换成一个字符串,这样我得到一个这样的字符串:“年-月-日小时:分钟:秒”

我尝试了什么:

(1)

final now = FieldValue.serverTimestamp();

将这个 now 变量保存到文档中...,文档字段如下所示:

时间戳:Day.Month Year at Hours:Minutes:Seconds UTC+2(时间戳)

然后我从字段“时间戳”中获取这个值并将其分配给文本小部件:

Text(doc.data["timestamp"].toString())

文本小部件如下所示:

时间戳(秒=1568560057,纳秒=790000000)

它应该喜欢什么(如前所述):

"年-月-日时:分:秒"

(2)

final now = FieldValue.serverTimestamp().toString();

将这个 now 变量保存到文档中...,文档字段如下所示:

时间戳:“'FieldValue' 的实例”(字符串)

然后我从字段“时间戳”中获取这个值并将其分配给文本小部件:

Text(doc.data["timestamp"].toString())

文本小部件如下所示:

“字段值”的实例

它应该喜欢什么(如前所述):

"年-月-日时:分:秒"


所以任何人都知道我如何获得我需要的字符串格式,或者可能是另一种方法,它为所有设备和时区返回相同的时间,并且可以转换为我需要的格式的字符串?

提前致谢!


解决方案: 感谢Frank 和CopsOnRoad

我们必须将此值保存到文档字段中:

final now = FieldValue.serverTimestamp();

这将被保存为文档字段中的时间戳对象。

现在我们需要将其转换为 DateTime 对象,以便在 Text Widget 中使用它,然后将其转换为 String 以获得格式:

Text(doc.data["timestamp"].toDate().toString())

文本小部件如下所示:

年月日时:分:秒

解决了。

【问题讨论】:

【参考方案1】:

当您从 Cloud Firestore 中的文档中读取时间戳时,您会返回 Timestamp object。

要将其转换为常规日期对象,您可以在其上调用toDate() method。

然后你可以用你通常做的任何方式格式化 Date 对象,例如使用DateFormat class,如Date Time format in Flutter dd/MM/YYYY hh:mm所示

【讨论】:

天哪,谢谢你的快速回复,你拯救了我的一天!

以上是关于Flutter Cloud Firestore 将 serverTimestamp 转换为 String的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 和 Cloud Firestore 获取问题

Flutter 中的 cloud_firestore 和 firebase_auth 兼容性问题

将 cloud_firestore 添加到 pubspec Flutter 后无法为模拟器构建应用程序

Flutter - 任务':cloud_firestore:compileDebugJavaWithJavac'的执行失败

Flutter/cloud-firestore“任务已经完成”异常

Cloud Firestore 连接我的 Flutter Windows 应用