所有日期时间都以utc格式存储
本文关键字:utc 格式 存储 日期 时间 | 更新日期: 2023-09-27 18:17:36
我正在构建一个c#日历应用程序,并将所有日期时间存储在Microsoft SQL-Server DateTime2类型中。此数据类型可以使用">"、">="等操作符进行搜索。
我现在读了更多关于这个主题的文章,例如这些帖子:
夏令时和时区最佳实践
如何存储重复的日期记住夏令时
以UTC存储时间是否总是一个好主意,或者在这种情况下存储本地时间更好?
我相信我在使用UTC和处理不同的DST值时犯了一个错误,特别是当与未来重复事件相关时。
我目前的实现对于事件工作得很好,直到重复的序列经过DST时间更改。
我相信我现在需要存储当地时间,本地时区和UTC时间
我应该如何构建我的数据库,我应该使用什么数据类型来存储我的数据在数据库中,将支持不同的客户端时区和夏令时值,同时也允许我查询指定的开始和停止日期时间范围内的匹配?
对于重复的事件,您肯定需要存储时区,是的,我将存储本地日期/时间。您可能还希望存储第一次出现的UTC值,如果这对比较有用的话。理论上,您可以只存储第一个日期/时间的UTC发生时间,因为它可以明确地转换为本地时间(如果您有时区)-但很可能您只需要本地时间,在这种情况下,执行这些转换可能毫无意义。
您还应该考虑如何处理时区数据中的更改—因为时区规则确实会更改,而且更改得相当频繁。(诚然,这取决于国家。)例如,为了提高效率,您可能希望生成一定数量的事件,并存储每个事件的UTC日期/时间(已经计算出如何处理由于DST转换而导致的跳过和模糊的本地时间)—但是如果时区数据更改,则需要对所有重复的事件再次执行该生成步骤。