1

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

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

但有时(我不知道何时以及为什么,但大多数情况下它都能正常工作)这种转换不像我预期的那样工作。
例如:

  • 时区是-5

在此处输入图像描述

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

在此处输入图像描述

那么,在这行代码具有上述值之后,您期望什么?

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

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

在此处输入图像描述

08/28/2013 4:00:00 AM. 如果时区为-5,则不正确。


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

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

4

1 回答 1

4

-5 是基本 UTC 偏移量,但在夏令时期间会更改 1 小时至 -4。

2013 年夏令时(美国)从 2:00 AM 开始

3月10日星期日

于凌晨 2:00 结束

11月3日星期日

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

于 2013-08-29T07:14:48.567 回答