我有一个关于 DateTimeOffset 和夏令时的问题。为了解释我的问题,假设现在日期和时间是:
11/6/2010 10:15:00 AM
如果我运行此代码:
DateTimeOffset myTime = DateTimeOffset.Now;
Console.WriteLine("Local time: " + myTime.ToLocalTime().DateTime);
然后我得到这个结果:
当地时间:11/6/2010 10:15:00 AM
这意味着事件发生在早上 10:15(我的时区是山区夏令时(-6 偏移))。
所以,然后我将此 DateTimeOffset 保存到我的 SQL Server 2008 db(作为 DateTimeOffset)。第二天我想向用户展示它。但是现在夏令时已经过期了。
如果我使用保存的关闭值(从前一天)运行上面的 WriteLine,会显示什么?
存储在数据库中的偏移量是-6。但是现在夏令时结束了,当前的偏移量是 -7。因此,据我了解文档,它将首先将我的时间转换为 UTC 时间(因此需要上午 10:15 并增加 6 小时(下午 4:15)。然后它将减去本地时间的当前偏移量(4:15下午 - 7 = 上午 9:15)。
因此,如果我的数学是正确的,那么现在当我显示我的事件时,它将显示它发生在上午 9:15 而不是上午 10:15。
情况不妙。我想存储时区信息,但我需要我的时间在同一个时区保持不变。(这意味着如果事件发生在犹他州的上午 10:15,那么下次我查看它(在犹他州)时,我需要看到它是在上午 10:15,无论夏令时是否发生了变化.
我想我不是第一个遇到这个问题的人。其他人会做什么来解决这个问题?(或者我的事实有误?)