如果我运行的代码如下:
bool areTheyTheSame = DateTime.UtcNow == DateTime.Now
我会得到什么? DateTime返回知道它的时区,以便我可以比较吗?
我的具体问题是我正在尝试构建类似缓存的API。如果需要DateTime AbsoluteExpiration,我是否必须强制我的API用户知道是给我一个UTC时间还是基于时区的时间?
[编辑]这个问题与我的问题非常相关:Cache.Add absolute expiration - UTC based or not?
[编辑]为了澄清未来的读者,DateTimeKind是不同的。未定义的DateTimeKind通常是一个问题,例如,当您从数据库中取出一个时,就会得到这个问题。在DateTime构造函数中设置DateTimeKind ...
[编辑] JonSkeet写了一篇可爱的博客文章,谴责这种行为并提供解决方案:http://noda-time.blogspot.co.uk/2011/08/what-wrong-with-datetime-anyway.html
答案 0 :(得分:6)
您是否真的亲自尝试过该片段?
它们不同,直接比较并不能解释差异,但您可以通过调用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
答案 1 :(得分:2)
在夏令时出现时,也要警惕当地DateTime
并致电.ToUniversalTime()
。
请参阅此处备注部分中的注释:http://msdn.microsoft.com/en-us/library/system.timezone.touniversaltime.aspx
答案 2 :(得分:0)
DateTime.Now返回系统时间,而DateTime.UtcNow返回UTC时间。