【发布时间】:2017-09-11 11:10:13
【问题描述】:
我对 UTC 感到困惑,在任何地方都找不到任何东西。
我的格林威治标准时间是 00:00:00
我想将其转换为美国东部标准时间的 UTC 时间。
我得到 04:00:00-04 作为 UTC 字符串。
这是我的代码。
string UTCDateTime;
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time")
DateTime dateTimeOld = new DateTime(2017,09,11,0,0,0);
DateTime dateTime = TimeZoneInfo.ConvertTimeToUtc(dateTimeOld, timeZone);
UTCDateTime = dateTime.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss");
var offset = timeZone.GetUtcOffset(dateTime);
UTCDateTime += ((offset < TimeSpan.Zero) ? "-" : "+") + offset.ToString("hh");'
所以我的输出将是一个 UTC 字符串:“2017-09-11 04:00:00-04”。
正确吗?不应该是“2017-09-11 00:00:00-04”
【问题讨论】:
-
您的问题令人困惑。您了解 UTC、GMT 和 EST 之间的区别吗?我保证有大量关于时区的文档。
-
UTC 是格林威治标准时间。东部标准时间是 UTC 的 -5。因此,当 UTC 为 00:00 EST 时为 7:00PM(夏令时:DST 8:00PM)。看起来你正在向后转换。 00:00 EDT 是 04:00 UTC
-
@jdweng 所以输出应该是“2017-09-11 00:00:00-04”,其中-4是时区。
-
@Equalsk 你能指出我正确的方向吗?我在问,UTC 字符串是否应该是“2017-09-11 04:00:00-04”。或“2017-09-11 00:00:00-04”为美国东部时间当地时间上午 12:00
-
@Sam 我想你错过了
TimeZoneInfo.ConvertTimeToUtc的工作原理。由于您的dateTimeOld具有Unspecified作为Kind属性,因此此方法假定它是源 时区的标准时间,在我们的例子中是美国东部标准时间。由于 this 时区比 UTC 晚 4 小时,因此当您将此时区中的日期时间转换为 UTC 时,最终将添加 4 小时。此外,由于您的dateTime已经是Utc,您的ToUniversalTime确实不执行任何对话。最好检查两次你想要做什么以及你的代码真正做什么。