27

我将计划存储在数据库中作为一周中的一天、小时和分钟。读取数据时,我们DateTime为下一次出现的那一天、小时和分钟创建一个对象,但我需要修改它以支持 DST。如有必要,我可以修改数据库。

我知道DateTimeOffset存储 UTC 日期/时间和偏移量。我也从这个 MSDN 博客条目中知道DateTimeOffset应该用于“使用夏令时”。

我正在努力理解的是DateTimeOffset“夏令时如何工作”。我的理解是,夏令时是一个政治决定,不能从纯粹的抵消中推断出来。如果这个结构只存储一个偏移量而不是一个命名的时区或国家,它怎么可能对 DST 友好呢?

4

1 回答 1

37

DateTimeOffset本身并不是真正的 DST 感知,但是TimeZoneInfo。ADateTimeOffset代表一个固定的时间点 - 所以你可以通过DateTimeOffset时区感知的东西到达a 。换句话说,如果我要求DateTimeOffset现在在英国,我最终会得到与 UTC 相差 +1 小时的东西。如果我DateTimeOffset在 12 月在英国要求一段时间,我最终会得到与 UTC 偏移量为 0 小时的东西。

如果您更改数据库以包含偏移量,并DateTimeOffset从用户选择的(应该是“未指定”的)和他们的时区创建DateTime,那么考虑到 DST,这应该为您提供正确的偏移量。

但是需要注意的一件事:如果我现在将某件事安排为“2 年时间”并且您现在确定偏移量,那么该偏移量在未来可能不正确 - 例如,当 DST 应用时,政府可能会改变,显然那是不会更改存储在数据库中的内容。

于 2011-09-26T10:57:19.730 回答