Flutter Cloud Firestore将serverTimestamp转换为String

时间:2019-09-15 15:43:49

标签: firebase flutter google-cloud-firestore timestamp

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

我想将其转换为字符串,以便得到这样的字符串:“ year-month-day hours:minutes:seconds”

我尝试了什么:

(1)

final now = FieldValue.serverTimestamp();

将此现在变量保存到文档中...,文档字段如下所示:

时间戳:日,月,小时:分钟:秒UTC + 2(时间戳)

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

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

文本小部件如下:

时间戳(秒= 1568560057,纳秒= 79​​0000000)

它应该是什么样子(如前所述):

“年月日时:分:秒”

(2)

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

将此现在变量保存到文档中...,文档字段如下所示:

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

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

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

文本小部件如下:

“ FieldValue”的实例

它应该是什么样子(如前所述):

“年月日时:分:秒”


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

谢谢!


解决方案: 感谢FrankCopsOnRoad

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

final now = FieldValue.serverTimestamp();

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

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

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

文本小部件如下:

年月日时:分:秒

解决了。

1 个答案:

答案 0 :(得分:1)

当您从Cloud Firestore中的文档中读取时间戳时,您将获得Timestamp object

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

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