首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >过去和未来事件的UTC和DST

过去和未来事件的UTC和DST
EN

Stack Overflow用户
提问于 2016-04-17 19:10:21
回答 2查看 389关注 0票数 0

我正在开发一个仅在单个时区使用的系统,但与其他以utc格式显示日期和时间的系统集成在一起,因此我们认为我们也可以使用utc。我们以前也听说过,将时间存储在utc中无论如何都是可行的,所以它感觉是最容易减少麻烦的方法。不过最近,我们遇到了一些麻烦。我们在系统中记录对用户有价值的事件,所以我们让用户搜索和查看它们。瑞典处于+1时区,因此当地时间0900的事件将存储为0800 utc时间。当向用户显示事件时,我们可以成功地将它们转换回本地时间,直到最近夏令时开始生效。将0800 utc转换为本地时间现在将增加2小时。记录的事件现在似乎发生在10:00。我该怎么处理呢?在这种情况下,存储的时间与实际保存到数据库的时间相同,我只需查看日期并根据dst在该特定时间是打开还是关闭来调整它。然而,我认为我需要一个通用的解决方案,因为系统中会有在不同时间(在其他地方)创建的时间戳,需要表示未来和过去的时间点。在我看来,我有两个选择。1.返回到存储本地时间,当我与其他使用utc的系统集成时,只需做一些额外的工作,或2.与每个utc时间戳一起存储一些数据,这些数据可以告诉我在dst期间是否创建了时间戳。我说错了吗?对吗?遗漏了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2016-04-17 20:40:02

您始终可以使用getTimezoneOffset方法获取客户端时区偏移量。现在剩下的就是将这个时区偏移量应用于存储在数据库中的UTC日期,并向最终用户显示正确的日期。另一方面,如果您需要在数据库中记录事件时显示用户使用的时区偏移量,那么您一定要在数据库中添加一个额外的列来记录此偏移量。当您想要处理多个时区时,事情就变得棘手起来:当您想要向印度的用户显示瑞典用户提交的记录时,会发生什么?

票数 0
EN

Stack Overflow用户

发布于 2016-04-18 08:55:01

您遗漏的主要问题是,您不能只将瑞典视为+1时区。时区和时区偏移是两个非常不同的东西。有关这方面的更多详细信息,请阅读the timezone tag wiki

相反,您可以采用以下两种方法之一:

  1. IANA tzdb identifier的角度考虑时区。对于瑞典,请使用Europe/Stockholm。使用此时区、使用实现确定客户端时区的tz database.
  2. Instead的语言、库或平台在UTC和本地时间之间进行转换,依靠客户端操作系统将其转换为本地时间。大多数环境(包括web浏览器中的JavaScript )可以从协调世界时转换为本地时间,反之亦然。使用此方法时,仅在客户端和服务器之间传输UTC时间。

此外,你在问题中没有问,但在你的标题中提到了未来的事件。这是一个非常不同的场景,通常需要您捕获本地时间和IANA时区。参见this answer for more details

您可能还希望阅读Daylight saving time and time zone best practices

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36675727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档