时区的日期时间

时间:2011-08-26 19:49:17

标签: c# datetime timezone

在C#中

DateTime.Now.DayDateTime.Now.Date.Day =>实际差异是什么?

比方说,当我在PST区域说晚上8点 - 08/26,当我打电话

DateTime.Now.Day //26
DateTime.Now.Date.Day //26

比方说,当我在EST区说晚上8点 - 08/26,当我打电话

DateTime.Now.Day //27
DateTime.Now.Date.Day //27

我想从日期时间或日期获取日期,以便我想在任何PST / EST / CST时区使用一天,任何想法吗?

2 个答案:

答案 0 :(得分:3)

绝对没有区别(请参阅DateTime Structure文档)。 .Date标识符只会从您正在使用的DateTime对象中删除时间信息。

如果您想要一致的时间,请使用UTC时间和DateTime.UtcNow属性。

答案 1 :(得分:3)

简短回答:使用DateTime.UtcNow

答案很长:

在表达式和类型系统方面细分:

DateTime是一个具有一些静态成员的值类型。其中一名成员是Now。静态Now属性返回填充了当前时间值的DateTime结构的实例。但它仍然是DateTime类型的实例。

Date成员可用于DateTime类型的实例,并返回一个新的DateTime实例,其中时间组件的值为零。但它仍然只是一个DateTime类型实例。

Day成员可用于DateTime类型的实例,并返回该月当前日期的整数。

首先,您想知道DateTime.Now.Date.DayDateTime.Now.Day之间是否存在差异。从逻辑上讲,你会认为没有,但我确实想在Now属性上指出一件事:它不是魔术。在访问Now属性并执行.Date.Day表达式后,代码运行,并且时间过去了。在此期间,使用的原始Now值变得陈旧。这个表达式非常快,几乎不需要任何时间 - 但它不是零。如果你不小心,你可能会造成竞争条件。

其次,您想了解时区并获得一致的日期。这里的诀窍是你是否真的只关心列出的美国时区以及你是否在任何区域都有午夜时间。但实际上最好的选择是查看DateTime数据类型的另一个成员:它是.UtcNow属性。无论您在哪个时区,都会返回相同的值。您可以使用它来评估在所有时区内保持一致的时间。