由于来自Question's Answer的hightechrider提及下面的代码块更为正确
var start = DateTime.Parse("08/10/2011 23:50:31").Utc;
if(start.AddMinutes(20) > DateTime.UtcNow)
然后使用TimeSpan
var start = DateTime.Now;
var oldDate = DateTime.Parse("08/10/2011 23:50:31");
if(start - oldDate).TotalMinutes >= 20)
这里由于DateTime
被执行并且在同一文化中被解析,那么它将如何产生差异?
这个答案让我感到非常Phoney。
答案 0 :(得分:10)
简而言之:UTC是一个连续的单值时标,而本地时间不是连续的或单值的。主要原因是Daylight Savings Time,它不适用于UTC。所以UTC从来没有向前或向后跳过一个小时,而当地时间则如此。当它向后跳跃时,同一时间值会出现两次。
最好使用连续的单值时标进行比较,除非你想自己搞乱DST。即使你这样做,也没有办法区分夏令时结束时的第一个和第二个“2am”,并且时钟被设置为一个小时。
技术说明:即使UTC是连续的,它也会偶尔插入额外的闰秒以跟上地球自转的减速。这些秒通常在一天结束时添加,并列出60秒。所以你有23:59:59,23:59:60,00:00:00。
答案 1 :(得分:4)
美国于2011年11月6日凌晨2点从夏令时转为标准时间。如果,在凌晨2点10分,我问过去上午1点50分,.NET会告诉我20分钟。事实上,这是一个小时20分钟,因为我们在凌晨2点将时钟设置为一小时。如果我使用UTC,我不会遇到这些问题 - 像.NET Framework这样的库具有正确处理这种不连续性所需的所有逻辑。
整个夏令时计划是一团糟,对于那些像你这样的国家(理智地)没有实现它的人来说,理解所出现的问题是很困难的。当政府开始改变周转日时,它会变得更加有趣。