【发布时间】:2013-08-06 11:20:55
【问题描述】:
我无法理解如何正确地将DateTime 转换为不同的时区。
可以说,我想将 DateTime 转换为 EST 中的时间:10:00(军事)到 UTC 中的 DateTime。
这是我的尝试:
DateTime unspecified = new DateTime(2013, 8, 15, 10, 0, 0, DateTimeKind.Unspecified);
var utc = TimeZoneInfo.ConvertTime(unspecified, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"), TimeZoneInfo.Utc);
...我用DateTimeKind.Unspecified 构造DateTime,因为它既不是UTC,也不是本地时间(它是美国东部标准时间10:00)。然后我将它传递给TimeZoneInfo.ConvertTime,告诉它这是美国东部标准时间的DateTime,我想将其转换为UTC。
由于EST is 5 hours behind of Coordinated Universal Time (UTC) 我希望utc 等于{15.08.2013 15:00:00},但是当我运行上面的代码时,由于某种原因,我得到{15.08.2013 14:00:00}(即时差是4 小时) .
问题是:为什么?这是某种日间节省时间问题吗?如果是这样 - 如何在没有日间节省时间概念的情况下获得这种转换?
【问题讨论】:
-
是的,夏时制就是这样做的原因。一个不考虑它的简单方法是简单地使用
TimeZoneInfo的BaseUtcOffset:new DateTime(2013, 8, 15, 10, 0, 0, DateTimeKind.Unspecified) .Subtract(TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time").BaseUtcOffset);但是,我不确定在某些特殊情况下是否会搞砸,哪些可能会搞砸。