c# – .ToUniversalTime(),为什么它以这种方式工作?

我注意到.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.

因此,我仍然试图围绕它解决这个问题.

在我的数据库中,7/10/2013是截止日期,并记录为“7/10/2013 4:00:00 AM”(因为在此期间,它是在夏令时期间,偏移-4).

现在是2014年2月,DST没有生效,抵消现在是-5.但正因为如此,当我将用户的时区偏移-5调整为“7/10/2013 4:00:00 AM”时,它将变为2013年7月7日而不是7/10/2013.

我该如何处理这种情况?

解决方法

由于 daylight savings.当地时间与您的时钟一样. UTC是连续的,没有间隙,没有模糊的时间点.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...