bit*_*kar 1 c# timezone datetime
不DateTime.Now.Ticks应该是相同的价值DateTime.UtcNow.Ticks?我检查了他们的值,发现差异代表我当前与UTC的时区偏移量.我在这里错过了什么?
这是对象设计方式的一部分.
在其他库和语言中(例如,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.Ticks和DateTime.Now.Ticks当前时区偏移之间的差异,因为DateTime.Now有Local种类,而且DateTime.UtcNow有Utc种类.因此,滴答DateTime.Now是基于您当地的时区,而滴答来自DateTime.UtcNowUTC.
该DateTimeOffset类型可用于抵消此问题.在Ticks仍然相对于所示的值,但Offset可被用于始终调整这些蜱回参考UTC帧.
如果您不喜欢这样,许多人不这样做,另一种方法是使用Noda Time库中的类型.
顺便说一下,我更详细地介绍了这些信息,并将它与我的Pluralsight课程中的其他编程语言,日期和时间基础知识进行了比较.