使用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 BC的日期?
(2)这2位是否保留给我不知道的东西?
(3)要分配日期BC并对其进行算术运算,除了定义新的数据类型外,我别无选择吗?
答案 0 :(得分:4)
前两位用于“种类”:
请参见my blog post for more information on this。诚然,“种类”仅是在.NET 1.1(IIRC)中引入的;我怀疑在此之前的范围限制仅仅是实用主义的问题。当您决定处理早于0001-01-01的值时,会出现各种实际问题,而且我怀疑.NET设计人员认为,这些问题对开发人员的伤害要大于对需要的开发人员数量的伤害。 em>较大的日期范围。
关于如何处理较早的日期,除非绝对必要,否则我强烈建议反对编写自己的日期/时间代码。我个人会推荐我的Noda Time库。 handles的日期范围为[9999BC,9999AD],并且具有十亿分之一秒的精度,并且支持IANA time zone database。