最常被忽视的情况not使用 UTC 是为了安排future次 - 特别是在复发模式.
想象一下,如果您的闹钟是按 UTC 安排的。假设您将其设置为每天上午 7:00。在 DST 转换后的第二天,您会在上午 6:00 或上午 8:00 醒来,具体取决于转换的方向。
此外,我们确定时区偏移和夏令时变化的规则会一直更新!所以你不能把未来的本地时间转换为 UTC 时间而不需要also保留当地时间本身。否则,当事情发生变化时,你就不会有原始的真理来源,你的所有时间都会再次消失。
我已发布于this many times before.
当然,一旦事件发生,您肯定希望记录 UTC 时间,或者使用日期时间偏移量.
另一个常见的用例是没有时间的日期,尤其是生日和其他周年纪念日。这些应该始终存储为年、月、日(例如在date
大多数数据库中的字段类型) - 时区或 UTC 之间没有转换。
关于您的具体观点:
如果我决定以 UTC 存储事件时间...将很难显示它们...
这实际上很容易。几乎每个编程环境都可以轻松做到这一点。唯一困难的地方是在非本地时区的 JavaScript 中,并且有一些库可以解决这个问题。
如果我决定以 UTC 存储事件时间...查询它们将非常困难(即,如果我想显示当地时间 2014 年 1 月 15 日发生的所有事件,我需要每个事件比较该事件的时间'2014-01-15' 在该事件的时区中意味着什么。不确定这在 SQL 中是否可能......)
那是真实的。每个人的“今天”都是不同的。如果您需要与浮动“日”相关的数据,那么这是不存储在 UTC 中的另一种情况。然而,一个DateTimeOffset
会给你两者的优点。
如果我决定将活动时间存储为当地时间...我将无法比较不同地点的活动时间(但这对我来说没问题)
不仅如此。没有偏移量的本地 DateTime 可能会不明确夏令时回退过渡。因此,您可能有一个本地值,但您无法区分它对应于两个时间点中的哪一个。
关于“电视时间”——将该概念保留给真正“浮动”的事物。示例:一家公司在世界各地设有办事处,办事处均在上午 8:00 开始工作。那是一段漂浮的时光。