我正在开发一个仅在单个时区使用的系统,但与其他以utc格式显示日期和时间的系统集成在一起,因此我们认为我们也可以使用utc。我们以前也听说过,将时间存储在utc中无论如何都是可行的,所以它感觉是最容易减少麻烦的方法。不过最近,我们遇到了一些麻烦。我们在系统中记录对用户有价值的事件,所以我们让用户搜索和查看它们。瑞典处于+1时区,因此当地时间0900的事件将存储为0800 utc时间。当向用户显示事件时,我们可以成功地将它们转换回本地时间,直到最近夏令时开始生效。将0800 utc转换为本地时间现在将增加2小时。记录的事件现在似乎发生在10:00。我该怎么处理呢?在这种情况下,存储的时间与实际保存到数据库的时间相同,我只需查看日期并根据dst在该特定时间是打开还是关闭来调整它。然而,我认为我需要一个通用的解决方案,因为系统中会有在不同时间(在其他地方)创建的时间戳,需要表示未来和过去的时间点。在我看来,我有两个选择。1.返回到存储本地时间,当我与其他使用utc的系统集成时,只需做一些额外的工作,或2.与每个utc时间戳一起存储一些数据,这些数据可以告诉我在dst期间是否创建了时间戳。我说错了吗?对吗?遗漏了什么吗?
发布于 2016-04-17 20:40:02
您始终可以使用getTimezoneOffset
方法获取客户端时区偏移量。现在剩下的就是将这个时区偏移量应用于存储在数据库中的UTC日期,并向最终用户显示正确的日期。另一方面,如果您需要在数据库中记录事件时显示用户使用的时区偏移量,那么您一定要在数据库中添加一个额外的列来记录此偏移量。当您想要处理多个时区时,事情就变得棘手起来:当您想要向印度的用户显示瑞典用户提交的记录时,会发生什么?
发布于 2016-04-18 08:55:01
您遗漏的主要问题是,您不能只将瑞典视为+1时区。时区和时区偏移是两个非常不同的东西。有关这方面的更多详细信息,请阅读the timezone tag wiki。
相反,您可以采用以下两种方法之一:
Europe/Stockholm
。使用此时区、使用实现确定客户端时区的tz database.此外,你在问题中没有问,但在你的标题中提到了未来的事件。这是一个非常不同的场景,通常需要您捕获本地时间和IANA时区。参见this answer for more details。
https://stackoverflow.com/questions/36675727
复制相似问题