ton*_*nik 3 timestamp firebase flutter google-cloud-firestore
我的flutter应用程序需要获取当前时间,我已经为此尝试了几个包:truetime、ntptime、dart中的Datetime、cloud firestore中的Timestamp.now,当在手机设置中切换时区时,它们都返回了不同的时间。它为所有时区的所有设备返回相同时间的唯一方法是 FieldValue.serverTimestamp() 方法,我将此值保存到 firestore 文档中,并在那里将其识别为时间戳类型的字段。
我想把它转换成一个字符串,这样我就得到一个这样的字符串:“年-月-日小时:分钟:秒”
我试过的:
(1)
final now = FieldValue.serverTimestamp();
Run Code Online (Sandbox Code Playgroud)
将此变量保存到文档中 ... ,文档字段如下所示:
时间戳:Day.Month Year at Hours:Minutes:Seconds UTC+2(时间戳)
然后我从字段“时间戳”中获取此值并将其分配给文本小部件:
Text(doc.data["timestamp"].toString())
Run Code Online (Sandbox Code Playgroud)
文本小部件如下所示:
时间戳(秒=1568560057,纳秒=790000000)
它应该是什么样子(如前所述):
“年月日时:分:秒”
(2)
final now = FieldValue.serverTimestamp().toString();
Run Code Online (Sandbox Code Playgroud)
将此变量保存到文档中 ... ,文档字段如下所示:
时间戳:“'FieldValue' 的实例”(字符串)
然后我从字段“时间戳”中获取此值并将其分配给文本小部件:
Text(doc.data["timestamp"].toString())
Run Code Online (Sandbox Code Playgroud)
文本小部件如下所示:
'FieldValue' 的实例
它应该是什么样子(如前所述):
“年月日时:分:秒”
所以任何人都知道我如何获得我需要的字符串格式,或者可能是另一种方法,它为所有设备和时区返回相同的时间,并且可以转换为我需要的格式的字符串?
提前致谢!
解决方案:感谢Frank和CopsOnRoad
我们必须将此值保存到文档字段中:
final now = FieldValue.serverTimestamp();
Run Code Online (Sandbox Code Playgroud)
这将在文档字段中保存为 Timestamp 对象。
现在我们需要将其转换为 DateTime 对象,以便在 Text Widget 中使用它,然后将其转换为 String 以获取格式:
Text(doc.data["timestamp"].toDate().toString())
Run Code Online (Sandbox Code Playgroud)
文本小部件如下所示:
年-月-日 小时:分钟:秒
解决了。
当您从 Cloud Firestore 中的文档读取时间戳时,您会得到一个Timestampobject。
要将其转换为常规日期对象,您可以调用其上的toDate()方法。
然后你可以用Date你通常做的任何方式来格式化该对象,例如使用Flutter dd/MM/YYYY hh:mm中日期时间格式所示的DateFormat类
| 归档时间: |
|
| 查看次数: |
2823 次 |
| 最近记录: |