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