DateTime.Now.Ticks
的值是否应该与DateTime.UtcNow.Ticks
相同?我检查了他们的值,发现差异代表我当前与UTC的时区偏移量。我在这里缺少什么?
答案 0 :(得分:7)
这是对象设计方式的一部分。
在其他库和语言中(例如,JavaScript' s Date
类型),该值绑定到UTC,并且通常使用1970-01-01的纪元。
但在.NET中,Ticks
值与Years
,Months
,Days
和其他属性所基于的相同参照系相关。它使用了0001-01-01的纪元。
在DateTime
中,有一个名为Kind
的属性:
DateTimeKind.Utc
,则表示该值与UTC相关。DateTimeKind.Local
,则表示该值与当地时区相关。DateTimeKind.Unspecified
,则您不知道您拥有的时区参考。你只需要一个日期和时间。您认为DateTime.UtcNow.Ticks
和DateTime.Now.Ticks
之间的差异是您当前的时区偏移,因为DateTime.Now
有Local
种,而DateTime.UtcNow
有{{1}亲切的。因此Utc
的刻度基于您当地的时区,而来自DateTime.Now
的刻度则基于UTC。
DateTime.UtcNow
类型可用于解决此问题。 DateTimeOffset
仍然相对于显示的值,但Ticks
可用于始终将这些刻度调整回UTC参考帧。
如果您不喜欢这样,许多人不这样做,另一种方法是使用Noda Time库中的类型。
顺便说一句,我更详细地介绍了这些信息,并将其与我的Pluralsight课程Date and Time Fundamentals中的其他编程语言进行比较。
答案 1 :(得分:0)
它的不同之处在于时区不同。