在日期时间中,仅使用 64 位中的 62 位.负值不在规范中.如何表示公元前的日期?



使用 VB.NET:

Debug.Print(DateTime.MinValue.ToString)
Debug.Print(DateTime.MaxValue.ToString)
Debug.Print(DateTime.MinValue.Ticks.ToString)
Debug.Print(DateTime.MaxValue.Ticks.ToString)

我获得:

01-01-0001
31-12-9999
0
3155378975999999999

二进制中的最大值读取0010 1011 1100 1010 0010 1000 0111 0101 1111 0100 0011 0111 0011 1111 1111 1111‬

64位中只有62位被使用。

(1)为什么MSB没有用来提供可以追溯到公元前10000年的日期?

(2)这2位是为我不知道的东西保留的吗?

(3)要分配日期BC并用它们进行算术,除了定义新的数据类型之外,我别无选择吗?

前两位用于"kind":

  • 当地
  • 世界协调时
  • 未指定
  • "对模棱两可的案件有特殊知识的本地人">

有关此内容的更多信息,请参阅我的博客文章。诚然,"种类"仅在 .NET 1.1 (IIRC) 中引入;我怀疑在此之前的范围限制只是实用主义的问题。当您决定处理早于 0001-01-01 的值时,会出现各种实际问题,我怀疑 .NET 设计人员认为这些问题会比需要更大日期范围的开发人员数量伤害更多的开发人员。

在如何处理较早的日期方面,我强烈建议不要编写自己的日期/时间代码,除非您绝对必须这样做。我个人会推荐我的野田时间图书馆。它可以处理 [9999BC、9999AD] 范围内的日期,并具有纳秒级的时间精度,并支持 IANA 时区数据库。

最新更新