在DateTime中,仅使用64位中的62位。负值不在规范中。我如何表示BC的日期?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在DateTime中,仅使用64位中的62位。负值不在规范中。我如何表示BC的日期?相关的知识,希望对你有一定的参考价值。

使用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并使用它们进行算术运算,除了定义新的数据类型之外别无选择吗?

答案

前两位用于“种类”:

  • 本地
  • 世界标准时间
  • 不明
  • “具有模糊案例的特殊知识的本地人”

my blog post for more information on this。不可否认,“种类”仅在.NET 1.1(IIRC)中引入;我怀疑在此之前的范围限制只是一个实用主义的问题。当您决定处理早于0001-01-01的值时会出现各种实际问题,我怀疑.NET设计者认为这些问题会比需要更大日期范围的开发人员数量更多地影响开发人员。

在如何处理早期日期方面,我强烈建议不要编写自己的日期/时间代码,除非你绝对必须这样做。我个人推荐我的Noda Time库。那个handles的日期在[9999BC,9999AD],并且有时间的纳秒精度,并支持IANA time zone database

以上是关于在DateTime中,仅使用64位中的62位。负值不在规范中。我如何表示BC的日期?的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言 8086 添加使用 32 位 reg 并在 64 位中赋值?

Oracle ODP.NET 托管驱动程序在 64 位中的运行速度比在 32 位中慢 50-100%

mysql 把时间换成时间戳进行储存在int栏位中还是直接用datetime好

Windows 8.1 64 位中的 IBM MobileFirst 平台安装

如何在 Windows 07 64 位中使用 composer 安装 PHPUnit?

32位和64位有啥区别 32位和64位区别都有哪些