Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 考虑到夏令时,如何在mongoDB中存储计划的未来日期_Java_Spring_Mongodb_Datetime - Fatal编程技术网

Java 考虑到夏令时,如何在mongoDB中存储计划的未来日期

Java 考虑到夏令时,如何在mongoDB中存储计划的未来日期,java,spring,mongodb,datetime,Java,Spring,Mongodb,Datetime,这是我的设想 我的API采用本地日期时间,这是用户(在同一地区)可以提交其工作的最新时间 我想将日期时间与时区一起保存在本地时间,这样我可以在将日期发送到客户端之前应用时区偏移量转换为UTC。即使DST在保存日期后发生更改,此操作也应有效 但MongoDB仅以UTC格式保存日期,至少在java mongo中是这样,它在保存到数据库之前将本地时间转换为UTC。如果不先将日期转换为UTC,则无法存储日期 因此,我的第二种方法是从请求中获取本地日期,并根据我已有的时区信息将其转换为UTC。这种方法可以

这是我的设想

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

我想将日期时间与时区一起保存在本地时间,这样我可以在将日期发送到客户端之前应用时区偏移量转换为UTC。即使DST在保存日期后发生更改,此操作也应有效

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

因此,我的第二种方法是从请求中获取本地日期,并根据我已有的时区信息将其转换为UTC。这种方法可以很好地工作,除非在保存日期后但在该日期到期之前更改了夏令时

e、 g.从客户处获得的本地日期为
2020-03-28 00:00
谁在+4 UTC。我将其转换为UTC,并将其存储为
2020-03-28620:00:00Z
。但是,如果夏令时在这段时间内发生变化,用户可以再获得一个小时的时间来提交他们的工作


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

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

默认情况下,MongoDB以UTC格式存储时间,并将任何本地时间表示形式转换为这种形式。必须对某些未修改的本地时间值进行操作或报告的应用程序可能会将时区存储在UTC时间戳旁边,并在其应用程序逻辑中计算原始本地时间


UTC是一个恒定的时间标准-它没有夏令时(DST)。由于所有时区都是相对于UTC表示的(有或没有DST),因此您担心的场景并不存在(这正是UTC存在的原因)。你可以在维基百科上阅读更多关于UTC的信息:也许,我没有正确解释我的问题。实际上,这是允许用户提交或不提交。如果我将一项任务分配给一些用户,并说他们必须在当地时间晚上8:00之前完成任务,并且几天后有夏令时,验证可能会关闭。我仍然不理解这个问题。您将位于+4 UTC区域的
2020-03-28 00:00
设置为到期日-转换为
2020-03-27T20:00:00Z
。现在,当您在不同时区的用户提交其分配时,您将使用+3 UTC时区中的时间
2020-03-28 00:00
,该时间将转换为
2020-03-27T21:00:00Z
。您的验证将看到第二个UTC时间超过了到期日期,因此无效。如果您的意思是创建者只会说“我希望在20:00之前提交”,而从不给您日期-您如何知道他们指的是哪一天20:00?假设你总是有一个日期(无论是由创建者提交还是通过某种硬编码规则提交),这意味着你可以成功地使用UTCof。当然会有一个日期,我的问题与这里提到的非常相似