为什么DateTime.MinValue 0001-01-01T00:00而不是0000-01-01T00:00?

时间:2015-09-08 11:41:42

标签: .net datetime theory

为什么在.NET DateTime.MinValue中是0001-01-01T00:00而不是0000-01-01T00:00?我认为0年应该是完全有效的,因为DateTime在某些事件(如耶稣的诞生)之后在概念上仍然是间隔。

在目前的DateTime实施中,似乎无法在耶稣出生的同一年跟踪某个日期。

我知道这只是一个理论问题,但知道是否有任何实际原因很有意思,为什么不使用年份= 0000。

1 个答案:

答案 0 :(得分:6)

传统的Proleptic Gregorian日历中不存在零年。 12月31日,公元前1月1日,公元前1月1日。

自公历的公共时代开始以来,日期时间在内部表示为刻度。如果愿意,您可以使用其他日历创建日期时间。

  

DateTime值类型表示日期和时间,值范围为00:00:00(午夜),1月1日,0001 Anno Domini(Common Era)至11:59:59 PM,12月31日,9999 AD(CE)在公历中。   时间值以称为刻度的100纳秒单位进行测量,特定日期是格里高利历日历中自公元0001年1月1日午夜12点起的刻度数(不包括闰秒添加的刻度) 。例如,刻度值31241376000000000L表示日期,星期五,1月01日,0100 12:00:00午夜。 DateTime值始终在显式或默认日历的上下文中表示。 - https://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx

然而,ISO 8601确实有零年,但是在格里高利历中指的是1BCE。请参阅:https://en.wikipedia.org/wiki/ISO_8601#Years