2011-08-26 153 views
2

在C#中时区的日期时间

DateTime.Now.Day比。 DateTime.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时区中使用一致的日期,任何想法?

回答

3

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

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

+0

谢谢,日期时间。现在 - >如果这段代码来自服务器端代码,比如说服务器是否在PST区域,它会给出PST日期时间值,反之亦然? – Sharpeye500

+1

'DateTime.Now'给出服务器的当前计算机/系统时间,不管它在什么时区,是的。 – qJake

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。无论您在哪个时区,这将返回相同的值。您可以使用它来评估在所有时区内保持一致的时间。