我有一种方法可以使用特定时区将DateTime
从本地转换为UTC:
TimeZoneInfo timeZone = FindSystemTimeZoneById(timeZoneId);
DateTime dateTimeInUtc = TimeZoneInfo.ConvertTimeToUtc(localDateTime, timeZone);
return dateTimeInUtc;
但有时候(我不知道何时以及为什么,但大部分时间它都能正常工作)这种转换并不像我预期的那样。
例如:
-5
08/28/2013 12:00:00 AM
(DateTimeKind
为Unspecified
)
那么在这行代码之后,你有什么期望值?
DateTime dateTimeInUtc = TimeZoneInfo.ConvertTimeToUtc(localDateTime, timeZone);
我希望UTC时间为08/28/2013 5:00:00 AM
。但
08/28/2013 4:00:00 AM
。如果时区为-5,则无法更正。
绝对相同的代码可以正常工作几个月。即使我看过调试器转换是正确的。
大约2周前我遇到了与此代码相同的问题(转换错误)。但是第二天问题就消失了,没有任何代码更改。
答案 0 :(得分:4)
-5是基础UTC偏移量,但在夏令时间内变化1小时至-4。
夏令时(美国)2013年上午2:00开始
3月10日星期日
并于凌晨2:00结束
11月3日星期日
在此期间,大多数州将时钟向前移动1小时(亚利桑那州除外)