在构建时区感知应用程序时,常见的陷阱(以及要测试的事情)有哪些?

sha*_*bda 6 language-agnostic timezone

我正在构建一个timzone识别应用程序.我应该测试的常见(而不是那么常见)场景有哪些?

只有我能想到的角落案例是夏令时,但我确信我错过了一堆.

hro*_*tyr 0

从我的头顶上掉下来

  • 时区是时间序列:我的意思是,如果您获取某个时刻的本地时间并将其存储在某个地方,那么您正在使用今天的时区信息。到明天,该信息可能会发生变化,并且存储的瞬间可能会有不同的解释。要解决此问题,请考虑将手头的时区信息与您想要描述的事件或瞬间一起存储。

  • 日期和时间是观察值:我的意思是,您可以在本地时间对某个时刻进行编码,而不管该时刻有效的时区如何,并在观察时进行转换。1 月 1 日凌晨 2 点可能比今天的某个参考点早 4 天零 3 小时。但在 1 月 1 日凌晨 2 点,完全相同的参考点可能看起来只是 4 天零 2 小时前。因此,在不同时间的参考点之间的经过时间之间进行转换时,您必须留意。特别是,如果您设置了一个计时器(以秒为N单位),您可能需要重新计算它是否仍然与事件匹配。

  • 时区是区域性的:我的意思是您不能将具有相同时区偏移的所有日期时间视为相等。特别是北半球和南半球的夏令时观测地点可能在一年中的一段时间内重合,而在一年中的其余时间则完全不同步。

  • 以当地时间指定的日期和时间不必存在或可以存在多次。您给出了 DST 示例,在 DST 向后切换时,中间发生两次,一次在切换之前,一次在切换之后,因此您可能需要一个标志。同样,向前切换 DST 会跳过一些时间。然而,夏令时并不是唯一的例子。一些靠近国际日期变更线的地区决定在国际日期变更线的左边或右边,结果要么是缺少一整天,要么是一整天重复两次。