java - 如何考虑夏令时在 mongoDB 中存储 future 的调度日期

标签 java spring mongodb datetime

这是我的场景

我的 API 采用本地日期时间,这是用户(在同一区域)可以提交其作品的最晚时间。

我想将日期时间与时区一起保存在本地时间,这样我可以在将日期发送给客户端之前应用时区偏移来转换为 UTC。即使夏令时在保存日期后发生变化,这也应该有效。

但是 MongoDB 至少在 java-mongo 中仅以 UTC 格式保存日期,在保存到数据库之前,它将本地时间转换为 UTC。如果不先将日期转换为 UTC,我就无法存储日期。

所以,我的第二种方法是从请求中获取本地日期,根据我已有的时区信息将其转换为 UTC。除非在保存日期后但在该日期到期之前夏令时发生更改的情况下,此方法可以正常工作。

例如从客户端获取的本地日期为 2020-03-28 00:00,位于 +4 UTC。我将其转换为 UTC 并将其存储为 2020-03-28T20:00:00Z。但如果夏令时在此期间发生变化,用户可以获得多一小时的时间来提交作业。

所以,我的问题是,如果我将日期存储在 UTC 中,或者提出其他建议,我该如何处理这种情况。

最佳答案

在 MongoDB 中,您可以存储当前日期和当前客户端相对于 UTC 的偏移量。您可以直接从客户端插入或更新,您将存储基于用户时钟的时间戳,但仍存储为 UTC 以及当前客户端相对于 UTC 的偏移量。您可以通过应用保存的偏移量来重建原始本地时间:

MongoDB Documentation

MongoDB stores times in UTC by default, and will convert any local time representations into this form. Applications that must operate or report on some unmodified local time value may store the time zone alongside the UTC timestamp, and compute the original local time in their application logic.

关于java - 如何考虑夏令时在 mongoDB 中存储 future 的调度日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60821558/

相关文章:

java - 当jibx绑定(bind)中字段为空时如何设置默认值?

java - Spring 3 bean 未正确连接

java - 在 Spring Hibernate 中使用 @ModelAttribute

mongodb获取不同的记录

mongodb - mongoexport E QUERY SyntaxError : Unexpected identifier

java - 如何使 TCPTransport$ConnectionHandler.run 消耗更少的 CPU 时间

java - StringBuilder 使用 .append (Java) 出现错误

java - Spark Master在Worker节点应用程序/作业提交后出现IOException后无休止地重新提交

java - spring如何识别构造函数中的参数

mongodb - Nifi 密码和其他敏感字段的安全参数存储