【发布时间】:2014-03-18 18:35:17
【问题描述】:
我注意到这个关于 .ToUniversalTime() 的奇怪问题,但我不知道为什么。
如果我这样做了
DateTime currentServerTime = System.DateTime.Now;
DateTime currentUTCServerTime = currentServerTime.ToUniversalTime();
log.Debug("Current server time :" + currentServerTime);
log.Debug("Current Server UTC Time is :" + currentUTCServerTime);
结果
Current server time :2/18/2014 2:09:23 PM
Current Server UTC Time is :2/18/2014 7:09:23 PM
相隔 5 小时。
鉴于服务器位于美国东海岸,偏移量为 -5。这是正确的。
如果我这样做了
String dateTimeString = "7/10/2013";
DateTime baseLined = Convert.ToDateTime(dateTimeString);
DateTime convertedUTCTime = baseLined.ToUniversalTime();
log.Debug(dateTimeString + " is :"+baseLined);
log.Debug(dateTimeString + " UTC time is :" + convertedUTCTime);
结果
7/10/2013 is : 7/10/2013 12:00:00 AM
7/10/2013 UTC time is: 7/10/2013 4:00:00 AM
相隔 4 小时。
为什么一个结果显示 5 小时的差异,而另一个显示 4??
请帮忙。
=== 编辑 ====
感谢 Jon 和 Usr。现在我明白 .ToUniversalTime() 将考虑服务器的 DST 并根据它附加的 DateTime 对象调整 UTC。
因此,我仍在努力解决这种情况。
在我的数据库中,2013 年 7 月 10 日是截止日期,并被记录为“2013 年 7 月 10 日凌晨 4:00:00”(因为那段时间是夏令时期间,偏移量 -4)。
现在是 2014 年 2 月,DST 无效,偏移量现在是 -5。但正因为如此,当我将用户的时区偏移量 -5 调整为“7/10/2013 4:00:00 AM”时,它变为 7/09/2013 而不是 7/10/2013。
我该如何处理这种情况?
【问题讨论】:
-
"鉴于服务器位于美国东海岸,偏移量为 -5。这是正确的。" - 您认为 7 月 10 日的偏移量是多少?
-
@Jon,哇,好的。这解释了很多。那么这意味着 ToUniversalTime() 也会考虑服务器的夏令时偏移量吗?我不知道!!!
-
是的,它将本地时间转换为世界时间。老实说,如果它不遵守 DST,那将毫无用处。
-
乔恩。非常感谢。这是有道理的,尽管现在我对一种情况感到困惑。您能否看看我在原始帖子中的“编辑”,看看我该如何解决这种情况”。提前致谢
-
乔的回答对我来说看起来不错。当然,除了我对“只使用野田时间”的正常评论:)