日期时间.滴答属性值



DateTime.Now.Ticks的值不应该和DateTime.UtcNow.Ticks一样吗?我检查了它们的值,发现差异代表我当前时区与 UTC 的偏移量。我在这里错过了什么?

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

在其他库和语言(例如,JavaScript 的 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.Now具有Local类型,而DateTime.UtcNow具有Utc类型。 因此,DateTime.Now的刻度基于您当地的时区,而DateTime.UtcNow的刻度则基于 UTC。

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

如果你不喜欢这样,就像许多人不喜欢的那样,另一种方法是使用 Noda 时间库中的类型。

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

这是不同的,因为时区不同。

相关内容

  • 没有找到相关文章