DateTime对象的奇怪行为

use*_*737 2 c# datetime

我做以下事情:

var now = DateTime.Now;
var utc = DateTime.UtcNow;
var timeSpan = now - utc;

Console.WriteLine("Now is: " + now.ToString("yyyy-MM-dd HH:mm:ss:ms") + " utc is: " + utc.ToString("yyyy-MM-dd HH:mm:ss:ms") + " timeSpan: " +
                    timeSpan.TotalMinutes);

Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

它给出了以下结果: 安慰 如果我采用timespan.hours(这是我实际使用的那个)它会显示1?应该是2我在那里做错了什么?

Ser*_*kiy 6

在你获得时间之间有一段时间(系统甚至可以在这两个调用之间切换进程):

 var now = DateTime.Now;
 // some time passes here
 var utc = DateTime.UtcNow;
Run Code Online (Sandbox Code Playgroud)

这就是为什么两个值之间的时间少于2小时.你应该只花一次时间,然后转换为当地时间:

 var utc = DateTime.UtcNow;
 var now = utc.ToLocalTime();
 // timeSpan: 120
Run Code Online (Sandbox Code Playgroud)

或者使用TimeZoneInfo.ToUniversalTime将本地时间转换为UTC时间:

 var now = DateTime.Now;
 var utc = TimeZone.CurrentTimeZone.ToUniversalTime(now);
Run Code Online (Sandbox Code Playgroud)