当前位置: 首页 > 面试题库 >

存储时间信息:需要时区吗?

司徒阳曜
2023-03-14
问题内容

我很想知道我在考虑的是不好的做法,还是因为这是一个具体而刻意的选择,实际上是否是一个不错的主意。我想存储特定城市中发生的事件的日期信息。我想将该数据存储为UTC时间戳。简单地存储时间戳和城市ID
/国家/地区ID(与特定时区相关联),而不是为每个事件存储时区,不是一个好主意吗?我问是因为时区可以更改,但是城市ID在数据库中永远不会更改。一旦在时区更改(不太可能)事件中将服务器与最新时区同步,该事件将是独立的,不受更改影响。但是,假设某个时区更改了其边界,那么以前在该时区中发生的事件可能不在该时区之内。这样做似乎不明智吗?我只是想知道,我一直在寻找最佳实践,但是在这种情况下,这实际上似乎是个不错的主意。这之所以特别有效,是因为应用程序设计模型永远不会改变,事件始终与特定城市相关联。

基本流程为:

  • 具有日期/位置的事件数据以标准格式(如ISO-8601 YYYY-MM-DD字符串)进入系统。

  • 系统将日期转换为UTC时间戳,并使用该时间戳和事件的城市ID将日期与事件一起存储。

  • 当用户请求查看该事件时,系统将提取与该事件关联的时间戳和城市信息,并使用城市的时区来相应地格式化显示的日期。

这是一个可怕的主意吗?这样做有好处吗?存储TZ偏移的概念是否与消除此问题的想法相同?


问题答案:

无论采用哪种方式,它都将根据更改的内容以不同的方式失败。

  1. 如果您将时间戳记存储在相应的时区中2013-12-29 12:34:56 America/New_York,例如,如果Bronx突然以America/New_York_Bronx不同的偏移量开始自己的时区,而您的事件恰好在Bronx中,则将失败。

确定发生这种情况的可能性以及失败的严重程度。

  1. 如果您将时间戳存储在UTC中,并且事件发生的时区正在重新定义其偏移量(例如,将DST日期偏移,或者完全偏移到另一个偏移量),则事件时间可能与该位置的实际挂钟时间不同。如果您2013-12-29 12:34:56 UTC在德国柏林的13:34:56 存储事件,并且柏林转移了夏令时,2013-12-29 12:34:56 UTC则现在可能对应于柏林当地时间14:34:56,而该事件实际上仍在当地时间13:34发生。

确定发生这种情况的可能性以及失败的严重程度。

  1. 如果存储UTC时间戳并将其链接到实际位置,然后再链接到时区,则可以解决这两个问题。但是为此,您将必须存储精确的物理位置,而不仅仅是“纽约”,否则,您将只剩下第一种情况,还有一个中间步骤。如果您确实存储了准确的物理位置,并且拥有将该位置解析为时区的精确方法,并且使时区数据库保持最新状态,则可以处理几乎所有的更改方案。

确定这是多么实用,以及这种额外的精度对您来说有多少价值。



 类似资料:
  • 问题内容: 我有数千张在坦桑尼亚拍摄的照片,我想将每张照片的日期和时间存储在MySQL数据库中。但是,该服务器位于美国,当我尝试存储坦桑尼亚的日期时间(在美国的Spring夏时制时间)处于“无效”小时之内时,我遇到了问题。坦桑尼亚不执行夏令时,因此该时间实际上是有效时间。 其他复杂情况是,来自许多不同时区的协作者将需要访问存储在数据库中的日期时间值。我希望他们 总是 以坦桑尼亚的时间出现,而不是出

  • 更复杂的是,来自许多不同时区的协作者将需要访问存储在数据库中的日期-时间值。我希望他们总是出来作为坦桑尼亚的时间,而不是在当地的时间,各种合作者在。 我不太愿意设定会话时间,因为我知道如果有人忘记设定会话时间,而把时间算错了,就会有问题。我无权更改服务器的任何内容。 我读过:夏令时和时区最佳实践和MySQL日期时间字段和夏令时--我如何引用“额外”小时?并在PHP/MySQL中将datetime存

  • 除了获取客户端的地区信息外,有时他们所在的时区信息也非常有用。LocaleContextResolver接口为LocaleResolver提供了拓展点,允许解析器在LocaleContext中提供更多的信息,这里面就可以包含时区信息。 如果用户的时区信息能被解析到,那么你总可以通过RequestContext.getTimeZone()方法获得。时区信息会自动被SpringConversionSe

  • 问题内容: 我刚刚升级到(1.5.1)的最新稳定版本,每次导入matplotlib时都会收到以下消息: …总是停顿几秒钟。 这是预期的行为吗?之前也一样,只是没有打印出来的消息吗? 问题答案: 正如汤姆在上面的评论中建议的,删除文件: 解决这个问题。就我而言,文件位于: 已编辑 几天前,该消息再次出现,我删除了上述位置中的文件,但没有成功。我发现,建议在这里通过有一个额外的位置信息与文本缓存文件是

  • 我有一个Python进程(或者更确切地说,在一个使用者组中并行运行的一组进程),它根据来自某个主题的Kafka消息输入来处理数据。通常每条消息的处理都很快,但有时,取决于消息的内容,可能需要很长时间(几分钟)。在这种情况下,Kafka broker断开客户端与组的连接,并启动重新平衡。我可以将设置为一个非常大的值,但它可能会超过10分钟,这意味着如果客户机死亡,集群在10分钟内无法正确地重新平衡。

  • 如何在窗口中查看时区转换信息?在窗口中,我只能找到我的时区(在香港)是“中国标准时间”。虽然我注意到在IANA数据库中有“亚洲/Hong_Kong”和过去夏令时的一些规则: 非常感谢任何帮助!