DateTime.Ticks属性值

bit*_*kar 1 c# timezone datetime

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

Mat*_*int 7

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

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

但在.NET,所述Ticks值与该参考同一帧Years,Months,Days,和其它性质是基于.它使用0001-01-01的纪元.

DateTime,有一个名为Kind:

  • 如果是那种DateTimeKind.Utc,那么您知道该值与UTC有关.
  • 如果是那种DateTimeKind.Local,那么您知道该值与本地时区相关.
  • 如果是那种DateTimeKind.Unspecified,那么你不知道你有什么时区参考.你只需要一个日期和时间.

您可以看到DateTime.UtcNow.TicksDateTime.Now.Ticks当前时区偏移之间的差异,因为DateTime.NowLocal种类,而且DateTime.UtcNowUtc种类.因此,滴答DateTime.Now是基于您当地的时区,而滴答来自DateTime.UtcNowUTC.

DateTimeOffset类型可用于抵消此问题.在Ticks仍然相对于所示的值,但Offset可被用于始终调整这些蜱回参考UTC帧.

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

顺便说一下,我更详细地介绍了这些信息,并将它与我的Pluralsight课程中的其他编程语言,日期和时间基础知识进行了比较.