【问题标题】:.ToUniversalTime(), why it works this way?.ToUniversalTime(),为什么它会这样工作?
【发布时间】: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,那将毫无用处。
  • 乔恩。非常感谢。这是有道理的,尽管现在我对一种情况感到困惑。您能否看看我在原始帖子中的“编辑”,看看我该如何解决这种情况”。提前致谢
  • 乔的回答对我来说看起来不错。当然,除了我对“只使用野田时间”的正常评论:)

标签: c# asp.net .net utc


【解决方案1】:

因为daylight savings。当地时间与您的时钟上显示的时间相同。 UTC 是连续的,没有间隙,没有不明确的时间点。

【讨论】:

  • 谢谢你。由于奇怪的原因,我对 ToUniversalTime() 的理解有误,看起来它也考虑了服务器所在位置的夏令时。在这种情况下,如何判断时间是否已通过夏令时调整?
  • @Liming 这是一个我无法回答的新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多