当DateTime.Kind为未指定时,.NET DateTime的 Ticks表示什么?

后端开发 2026-07-12

请查看下面的C#代码:

DateTime.TryParse("2025-05-03T02:10:36", out DateTime dateTime); Console.WriteLine(dateTime.Kind); Console.WriteLine(dateTime.Ticks);

Ticks 的值在这里是 638818350360000000Kind 的值是 "Unspecified"。我明白为什么 Kind 未被指定,但我不明白在这种情况下系统如何为 Ticks 确定一个值。

文档指出

如果 DateTime 对象的 Kind 属性被设为 Unspecified,它的滴答数表示自公元0001年 1月 1日午夜12:00:00以来在未知时区经过的时间。

我完全不知道那是什么意思。在不知道该时间所在时区的情况下,如何指定自某一时间点以来的滴答数?

解决方案

在不知道该时间所在时区的情况下,如何指定自某一时间点以来的滴答数?

基本上,可以把它看作独立于任何具体时区。

需要理解的重点是,具有 KindUnspecifiedDateTime 并不表示一个时间上的瞬间——它表示在Noda Time中我们称之为 LocalDateTime 的东西(至少大致如此;还要考虑日历系统的整体因素)。

即使你忽略 Ticks 属性本身,只要举个例子,例如没有时区的2026年 3月 1日早上8 点——这就是一个 DateTime,带有一种 Unspecified 的情形可以表示的时间点。那个日期/时间在世界各地的不同时区中确实会对应不同的瞬时,但在某些情况下,它仍然可以是一个有用的概念。

正如评论中已经提到的,如果你使用我的 Noda Time 库,就不会出现这类歧义。但如果你想坚持使用BCL类型(这是一个合理的选择)来表示一个时间点,你可以要么使用 DateTimeOffset,要么始终确保使用一个 DateTimeKindUtc

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章