2013-08-29 24 views
1

我不得不DateTime从本地使用特定的时区转换为UTC的方法:转换日期时间,使用时区有时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周前我遇到了与此代码相同的问题(错误转换)。但在第二天,问题消失了,没有任何代码更改。

回答

4

-5是基准UTC时差,但是在夏令时时间变化1小时到-4。

夏令时(美国)2013开始在凌晨2:00

周日,3月10日

周日,十一月结束于2:00 AM 3

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

+0

但在此期间,我将UTC转换为+5小时。 1周前,使用相同的代码是5小时。 –

+0

@SergeyGavruk你使用什么日期?一样?或者您是否恰好在3月10日之前或11月3日之后使用了日期? – Alan

+0

hm。也许原因是因为我的日期不在这个范围内。谢谢 –