DateTime.Ticks属性值

时间:2015-03-11 02:35:36

标签: c# datetime timezone

DateTime.Now.Ticks的值是否应该与DateTime.UtcNow.Ticks相同?我检查了他们的值,发现差异代表我当前与UTC的时区偏移量。我在这里缺少什么?

2 个答案:

答案 0 :(得分:7)

这是对象设计方式的一部分。

在其他库和语言中(例如,JavaScript' s Date类型),该值绑定到UTC,并且通常使用1970-01-01的纪元。

但在.NET中,Ticks值与YearsMonthsDays和其他属性所基于的相同参照系相关。它使用了0001-01-01的纪元。

DateTime中,有一个名为Kind的属性:

  • 如果类型为DateTimeKind.Utc,则表示该值与UTC相关。
  • 如果种类为DateTimeKind.Local,则表示该值与当地时区相关。
  • 如果种类为DateTimeKind.Unspecified,则您不知道您拥有的时区参考。你只需要一个日期和时间。

您认为DateTime.UtcNow.TicksDateTime.Now.Ticks之间的差异是您当前的时区偏移,因为DateTime.NowLocal种,而DateTime.UtcNow有{{1}亲切的。因此Utc的刻度基于您当地的时区,而来自DateTime.Now的刻度则基于UTC。

DateTime.UtcNow类型可用于解决此问题。 DateTimeOffset仍然相对于显示的值,但Ticks可用于始终将这些刻度调整回UTC参考帧。

如果您不喜欢这样,许多人不这样做,另一种方法是使用Noda Time库中的类型。

顺便说一句,我更详细地介绍了这些信息,并将其与我的Pluralsight课程Date and Time Fundamentals中的其他编程语言进行比较。

答案 1 :(得分:0)

它的不同之处在于时区不同。