当datetime从Flatter传输到firebase firestore时,秒数丢失

当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

我使用datetime作为id在firestore中保存文档,但如果我在同一分钟内保存了多个文档,则会删除旧文档,并将其替换为“在同一分钟内”保存的最新文档 我检查颤振中的日期时间,它有秒和毫秒 但在firestore中,只有分、秒和毫秒被设置为00:000

意思是2020-12-04 13:51:03.836035在颤振中变为2020-12-04 13:51:00.000在firestore中

我怎样才能解决这个问题

我用

dateTime是一个dateTime对象


我说的是“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)将它们去掉了. 如果您不想这样做,请删除该代码。您必须准确定义要存储的内容,然后确保代码与之匹配。如果你想在这里得到帮助,你应该编辑这个问题,更详细地解释什么东西没有按你期望的方式工作,并给出具体的例子。