基本上我将存储在数据库中的本地日期转换为UTC。但是我已经在某处读到了2007年日光节约规则发生了变化。所以Date.ToUniversalTime()函数仍能正常工作。基本上2007年之前的日期(新规则生效时)将正确转换,但之后的日期不会。我在这儿吗?或者.Net会在内部处理转换,即根据不同的夏令时规则吗?
编辑:日期以本地时间的形式存储在数据库中。我正在将其转换为UTC。所以应该使用2005年的日光规则而不是今天的规则来转换诸如“2005年3月9日”之类的日期。 2007年美国的规则发生了变化。所以日期错误一小时。
答案 0 :(得分:3)
这取决于您使用的.NET版本以及您正在使用的Windows版本。 .NET 3.5具有TimeZoneInfo类,其中包括历史更改等 - 在此之前,不幸的是,支持更加不完整。
答案 1 :(得分:1)
我希望ToUniversalTime()
能够考虑到这一点。您是否尝试过检查DST更改之前和之后的日期结果?
修改
如果您知道数据库中所有日期的时区偏移量,我明确建议您在表级别将它们转换为UTC。你摆脱了很多令人头疼的问题。转换为本地时间以便显示更容易。
答案 2 :(得分:1)
这取决于信息在数据库中的存储方式。
希望db中的数据包含UTC偏移量,如果是这样,对夏令时规则的任何更改都将无关紧要。
如果UTC偏移量未知,则几乎不可能知道如何将其转换为UTC。例如,如果时间存储为没有元数据的整数,则系统必须知道何时将其添加到数据库中才能找出相应的UTC时间戳。
答案 3 :(得分:1)
我不想这么说,但是你是搞砸了。在问题变得更糟之前,咬紧牙关并将数据库中的日期更改为UTC。如果您继续尝试将当地时间存储在数据库中,您的代码将成为特殊情况日期数学的噩梦。
妥协:将本地时间和UTC时间存储在不同的列中;至少你会有一个参考
请参阅this post了解更多原因,绝不在本地时间存储db时间
答案 4 :(得分:0)