DateTimeOffset如何处理夏令时

本文关键字:处理 夏令时 何处理 DateTimeOffset | 更新日期: 2023-09-27 18:09:44

我在数据库中以星期、小时和分钟的形式存储日程安排。当读取数据时,我们为当天、小时和分钟的下一个事件创建一个DateTime对象,但我需要将其修改为dst感知。如果有必要,我可以修改数据库。

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

我正在努力理解的是DateTimeOffset"工作(s)与夏令时"。我的理解是,日光节约时间是一个政治决定,不能从纯粹的偏移来推断。如果这个结构只存储偏移量而不存储命名的时区或国家,它怎么可能是DST友好的呢?

DateTimeOffset如何处理夏令时

DateTimeOffset本身并不是真正的dst感知,但TimeZoneInfo是。DateTimeOffset表示时间上的固定瞬间——因此您可以通过时区感知的东西将转换为 DateTimeOffset。换句话说,如果我现在在英国要求一个DateTimeOffset,我最终会得到与UTC相差+1小时的东西。如果我要求英国12月的某个时间的DateTimeOffset,我最终会得到与UTC相差0小时的东西。

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

有一件事需要注意:如果我现在为"2年时间"安排了一些事情,而你现在确定了偏移量,那么偏移量在将来可能会不正确-例如,政府可能会在夏时制应用时改变,显然这不会改变存储在数据库中的内容。