DateTime.Now与DateTime.UtcNow的使用差异

Har*_*aid 1 .net c# datetime datediff utc

正如本问题的来自hightechrider 的回答提到下面的代码块更为正确

var start = DateTime.Parse("08/10/2011 23:50:31").Utc;

if(start.AddMinutes(20) > DateTime.UtcNow)
Run Code Online (Sandbox Code Playgroud)

然后由TimeSpan使用

var start = DateTime.Now;
var oldDate = DateTime.Parse("08/10/2011 23:50:31");

if(start - oldDate).TotalMinutes >= 20)
Run Code Online (Sandbox Code Playgroud)

这里既然DateTime执行并在同一文化中解析,那么它将如何产生差异?

我感觉很的这个答案.

Jef*_*Sax 10

简而言之:UTC是一个连续的单值时标,而本地时间不是连续的或单值的.主要原因是夏令时,不适用于UTC.所以UTC从来没有向前或向后跳过一个小时,而当地时间则如此.当它向后跳跃时,同一时间值会出现两次.

最好使用连续的单值时标进行比较,除非你想自己搞乱DST.即使你这样做,当夏令时结束并且时钟缩回一小时时,也无法区分第一和第二"2am".

技术说明:即使UTC是连续的,它也会偶尔插入额外的闰秒以跟上地球自转速度的减慢.这些秒通常在一天结束时添加,并列出60秒.所以你有23:59:59,23:59:60,00:00:00.


Mic*_*tta 5

美国在 2011 年 11 月 6 日凌晨 2 点从夏令时转换为标准时间。如果在凌晨 2 点 10 分,我问过去凌晨 1 点 50 分有多远,.NET 会告诉我 20 分钟。事实上,这是一个小时零 20 分钟,因为我们在凌晨 2 点将时钟拨回了一个小时。如果我使用 UTC,我就不会遇到这些问题 - 像 .NET Framework 这样的库具有正确处理此类不连续性所需的所有逻辑。

整个夏令时计划一团糟,对于像您这样的国家(明智地)没有实施它的任何人来说,都很难理解出现的问题。当政府开始改变转换日期时,它变得更加有趣。