UtcNow和现在是相同的日期时间吗? 他们知道他们不同吗?

如果我运行一个代码片段:

bool areTheyTheSame = DateTime.UtcNow == DateTime.Now 

我会得到什么? DateTime返回知道它的时区,以便我可以比较吗?

我的具体问题是我正在尝试构建类似缓存的API。 如果需要DateTime AbsoluteExpiration,我是否必须强制我的API用户知道是给我一个UTC时间还是基于时区的时间?

[编辑]这个SO问题与我的问题也非常相关: Cache.Add绝对到期 – 是否基于UTC?

[编辑]为了澄清未来的读者,DateTimeKind是不同的。 未定义的DateTimeKind通常是一个问题,例如,当您从数据库中取出一个时,就会得到这个问题。 在DateTime构造函数中设置DateTimeKind …

[编辑] JonSkeet写了一篇可爱的博客文章,谴责这种行为并提供解决方案: http : //noda-time.blogspot.co.uk/2011/08/what-wrong-with-datetime-anyway.html

你真的试过自己的片段了吗?

它们是不同的,并且直接比较不能解释差异,但您可以通过调用ToUniversalTime将本地转换为UTC。

 var now = DateTime.Now; var utcNow = DateTime.UtcNow; Console.WriteLine(now); // 12/07/2010 16:44:16 Console.WriteLine(utcNow); // 12/07/2010 15:44:16 Console.WriteLine(now.ToUniversalTime()); // 12/07/2010 15:44:16 Console.WriteLine(utcNow.ToUniversalTime()); // 12/07/2010 15:44:16 Console.WriteLine(now == utcNow); // False Console.WriteLine(now.ToUniversalTime() == utcNow); // True Console.WriteLine(utcNow.ToUniversalTime() == utcNow); // True 

同时要小心采取本地DateTime并在夏令时出现时调用.ToUniversalTime()

请参阅此处备注部分中的注释: http : //msdn.microsoft.com/en-us/library/system.timezone.touniversaltime.aspx

DateTime.Now返回系统时间,而DateTime.UtcNow返回UTC时间。