使用时区将datetime转换为UTC有时会错误地工作

时间:2013-08-29 07:10:52

标签: c# .net datetime

我有一种方法可以使用特定时区将DateTime从本地转换为UTC:

TimeZoneInfo timeZone = FindSystemTimeZoneById(timeZoneId);
DateTime dateTimeInUtc = TimeZoneInfo.ConvertTimeToUtc(localDateTime, timeZone);
return dateTimeInUtc;

但有时候(我不知道何时以及为什么,但大部分时间它都能正常工作)这种转换并不像我预期的那样。
例如:

  • 时区为-5

enter image description here

  • 当地时间为08/28/2013 12:00:00 AMDateTimeKindUnspecified

enter image description here

那么在这行代码之后,你有什么期望值?

DateTime dateTimeInUtc = TimeZoneInfo.ConvertTimeToUtc(localDateTime, timeZone);

我希望UTC时间为08/28/2013 5:00:00 AM。但

enter image description here

08/28/2013 4:00:00 AM。如果时区为-5,则无法更正。


绝对相同的代码可以正常工作几个月。即使我看过调试器转换是正确的。

大约2周前我遇到了与此代码相同的问题(转换错误)。但是第二天问题就消失了,没有任何代码更改。

1 个答案:

答案 0 :(得分:4)

-5是基础UTC偏移量,但在夏令时间内变化1小时至-4。

夏令时(美国)2013年上午2:00开始

3月10日星期日

并于凌晨2:00结束

11月3日星期日

在此期间,大多数州将时钟向前移动1小时(亚利桑那州除外)