当datetime从Flatter传输到firebase firestore时,秒数丢失
我使用datetime作为id在firestore中保存文档,但如果我在同一分钟内保存了多个文档,则会删除旧文档,并将其替换为“在同一分钟内”保存的最新文档 我检查颤振中的日期时间,它有秒和毫秒 但在firestore中,只有分、秒和毫秒被设置为00:000 意思是2020-12-04 13:51:03.836035在颤振中变为2020-12-04 13:51:00.000在firestore中 我怎样才能解决这个问题 我用 dateTime是一个dateTime对象当datetime从Flatter传输到firebase firestore时,秒数丢失,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我使用datetime作为id在firestore中保存文档,但如果我在同一分钟内保存了多个文档,则会删除旧文档,并将其替换为“在同一分钟内”保存的最新文档 我检查颤振中的日期时间,它有秒和毫秒 但在firestore中,只有分、秒和毫秒被设置为00:000 意思是2020-12-04 13:51:03.836035在颤振中变为2020-12-04 13:51:00.000在firestore中 我怎样才能解决这个问题 我用 dateTime是一个dateTime对象 我说的是“document
我说的是“documentDateTime”这一部分:dateTime或dateTime.toString()我强烈建议不要使用日期字符串作为文档ID。这在今天给您带来了麻烦,将来还会继续给您带来麻烦 相反,将时间作为字段存储在文档中(以您认为最方便的格式),并使用该字段查询和排序文档。创建文档时,可以使用
add()
提供的随机文档ID
如果需要更新该文档中的某些内容,可以使用文档的字段通过查询找到它,然后在找到该文档后更新它。由您决定如何最好地存储时间,以便再次找到文档。这是您需要仔细考虑的问题。我强烈建议不要使用日期字符串作为文档ID。这会给您带来今天的麻烦,将来还会继续给您带来麻烦 相反,将时间作为字段存储在文档中(以您认为最方便的格式),并使用该字段查询和排序文档。创建文档时,可以使用
add()
提供的随机文档ID
如果需要更新该文档中的某些内容,可以使用文档的字段通过查询找到它,然后在找到该文档后更新它。由您决定如何最好地存储时间,以便再次找到文档。这是您需要仔细考虑的问题。我使用了您共享的代码创建了一个文档,然后我将文档下载回Flatter app并打印了它的内容,下面是我得到的:
// Add code right below your snippet
users
.doc(auth.currentUser.uid)
.collection('documents')
.doc(dateTime.toString())
.get()
.then((doc) => print(doc.data()));
// Output:
{document:
{2020-12-18 13:49:58.496955:
{documentContent: xx,
documentDateTime: Timestamp(seconds=1608299398, nanoseconds=496000000)}},
day: Timestamp(seconds=1608249600, nanoseconds=0)}
实际上,字段documentDateTime
包含毫秒数据。发生的情况是,即使数据存在,Firestore控制台UI也不显示毫秒数据
我使用您共享的代码创建了一个文档,然后我将文档下载回Flatter应用程序并打印了它的内容,下面是我得到的:
// Add code right below your snippet
users
.doc(auth.currentUser.uid)
.collection('documents')
.doc(dateTime.toString())
.get()
.then((doc) => print(doc.data()));
// Output:
{document:
{2020-12-18 13:49:58.496955:
{documentContent: xx,
documentDateTime: Timestamp(seconds=1608299398, nanoseconds=496000000)}},
day: Timestamp(seconds=1608249600, nanoseconds=0)}
实际上,字段documentDateTime
包含毫秒数据。发生的情况是,即使数据存在,Firestore控制台UI也不显示毫秒数据
它看起来像是。子字符串(0,10)会将日期的时间缩短?如果你删除它,它会改变什么吗?我看到了,但我说的是“documentDateTime”部分:dateTime或dateTime.toString()啊,我的错误。那么,当您调试并获取文档的值(
dateTime.toString()
)时会发生什么情况呢?您的.substring(0,10)似乎会修剪日期以外的时间?如果你删除它,它会改变什么吗?我看到了,但我说的是“documentDateTime”部分:dateTime或dateTime.toString()啊,我的错误。那么,当您调试并获取文档的值(dateTime.toString()
)时会发生什么呢?谢谢您的建议,但是我已经在文档中为dateTime对象设置了一个字段,但是秒数并没有注册到00:000,我如何解决这个问题呢?您使用子字符串(0,10)将它们去掉了。如果您不想这样做,请删除该代码。您必须准确定义要存储的内容,然后确保代码与之匹配。如果你想在这里得到帮助,你应该编辑这个问题,以更详细地解释什么东西没有按你期望的方式工作,并给出具体的例子。谢谢你的建议,但我在文档中已经有了DateTime对象的字段,但秒数并没有注册为00:000,我如何解决这个问题?你用子字符串(0,10)将它们去掉了. 如果您不想这样做,请删除该代码。您必须准确定义要存储的内容,然后确保代码与之匹配。如果你想在这里得到帮助,你应该编辑这个问题,更详细地解释什么东西没有按你期望的方式工作,并给出具体的例子。