Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UtcNow和现在是同一个日期时间吗?他们知道他们';你不一样吗?_C#_Datetime_Timezone_Utc - Fatal编程技术网

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