【问题标题】:What's the best practices to handle frequently changing timezones处理经常变化的时区的最佳做法是什么
【发布时间】:2016-03-20 18:01:10
【问题描述】:

我正在编写玩具物流服务。结果,产品将穿越许多不同的时区,我需要查询事件的严格顺序,以及产品在一天中的哪个小时(例如,当太阳在最热,1200)。

目前,我正在保存 jodatime DateTimes 并尝试专门处理它们,但我知道时间非常棘手,我想知道是否需要做任何其他事情来确保一切正常。

【问题讨论】:

  • 仅以 UTC 时间存储?
  • 那我就不能查询像中午这样的事情了
  • 是的,但是中午的概念本身可能是错误的:当您旅行时,每天可以有多个中午。请注意,您离两极越近,您必须越慢才能获得这种效果。顺便说一句:当天中午:考虑在日期边界旅行。您可以在今天午餐后 2 小时后到昨天午餐前一小时进行旅行……我会使用 UTC,并在跨越时区时触发 updateTimezone 事件。 ..
  • 这是一个很好的观点。我想要不同日子的中午——我直接对一天中最热和最冷的部分感兴趣。触发 updateEvent 是跟踪发生的确切事件集的一种很好的方法,它有助于管理越过日期线的复杂性。

标签: java time timezone jodatime


【解决方案1】:

我不熟悉 jodatime,但是当我需要存储时间时,我总是喜欢使用 Epoch 时间,因为它很容易操作以获得不同的格式。如果您对此感兴趣,这里有一个转换器网站,我觉得它很有帮助:http://www.epochconverter.com/

【讨论】:

    【解决方案2】:

    鉴于您正在记录发生的事件(而不是计划未来的事件),您可能无需担心将来发生的时区规则更改。

    因此,存储时间戳(例如作为 UTC)以及事件位置的时区 ID 是合理的。为了使查询更容易,您可以还存储事件发生时的本地时间。请注意,当玩具穿越时区时,可能会在不同的时间发生多个事件,所有这些事件都发生在同一天的“中午”(但在不同的区域)。您确实需要仔细考虑您真正想要对本地日期/时间值执行哪些查询。

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2013-10-15
      • 2012-08-25
      • 2010-11-05
      • 1970-01-01
      相关资源
      最近更新 更多