在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时区使用一天,任何想法吗?
答案 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.Day
和DateTime.Now.Day
之间是否存在差异。从逻辑上讲,你会认为没有,但我确实想在Now
属性上指出一件事:它不是魔术。在访问Now
属性并执行.Date.Day
表达式后,代码运行,并且时间过去了。在此期间,使用的原始Now
值变得陈旧。这个表达式非常快,几乎不需要任何时间 - 但它不是零。如果你不小心,你可能会造成竞争条件。
其次,您想了解时区并获得一致的日期。这里的诀窍是你是否真的只关心列出的美国时区以及你是否在任何区域都有午夜时间。但实际上最好的选择是查看DateTime数据类型的另一个成员:它是.UtcNow
属性。无论您在哪个时区,都会返回相同的值。您可以使用它来评估在所有时区内保持一致的时间。