C# UtcNow和现在是同一个日期时间吗?他们知道他们';你不一样吗?
如果我运行以下代码段:C# UtcNow和现在是同一个日期时间吗?他们知道他们';你不一样吗?,c#,datetime,timezone,utc,C#,Datetime,Timezone,Utc,如果我运行以下代码段: bool areTheyTheSame = DateTime.UtcNow == DateTime.Now 我会得到什么?返回的日期时间是否知道其时区,以便我进行比较 我的具体问题是,我正在尝试构建一个类似缓存的API。如果需要DateTime AbsoluteExpiration,我是否必须强制API的用户知道是给我UTC时间还是基于时区的时间 [编辑]这个问题与我的问题也非常相关: [编辑]为了向未来的读者澄清,DateTimeKind是不同的。未定义的DateTi
bool areTheyTheSame = DateTime.UtcNow == DateTime.Now
我会得到什么?返回的日期时间是否知道其时区,以便我进行比较
我的具体问题是,我正在尝试构建一个类似缓存的API。如果需要DateTime AbsoluteExpiration,我是否必须强制API的用户知道是给我UTC时间还是基于时区的时间
[编辑]这个问题与我的问题也非常相关:
[编辑]为了向未来的读者澄清,DateTimeKind是不同的。未定义的DateTimeKind通常是一个问题,例如,当您从数据库中取出一个时,就会遇到这个问题。在DateTime构造函数中设置DateTimeKind
[编辑]JonSkeet写了一篇可爱的博客文章,谴责这种行为,并提出了解决方案:你真的亲自尝试过这个片段吗 它们是不同的,直接比较不能解释差异,但是您可以通过调用将本地转换为UTC
DateTime.现在返回系统时间,而DateTime.UtcNow返回UTC时间。当夏令时,也要小心使用本地
日期时间
并调用.ToUniversalTime()
请参阅此处备注部分的注释:我没有尝试,但主要是因为我感到惊讶的是,这个问题还没有开始,我认为它对人们很有用。也许有点懒惰,但我发誓,大部分都是出于好意我想看到的关键测试可能是“Console.WriteLine(utcNow.ToUniversalTime()==utcNow);”的结果。此外,还有一个不同的
DateTimeKind
。另一个方向有一个ToLocalTime()
。小心使用DateTimeKind。未定义的,这些时间总是被转换(ToUniversalTime
将其视为本地时间,ToLocalTime
视为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