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

Why is DateTime.MinValue 0001-01-01T00:00 instead of 0000-01-01T00:00?

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

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

我知道这只是一个理论问题,但有趣的是知道是否有任何实际原因,为什么不使用 year = 0000。

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

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

The DateTime value type represents dates and times with values ranging from 00:00:00 (midnight), January 1, 0001 Anno Domini (Common Era) through 11:59:59 P.M., December 31, 9999 A.D. (C.E.) in the Gregorian calendar. Time values are measured in 100-nanosecond units called ticks, and a particular date is the number of ticks since 12:00 midnight, January 1, 0001 A.D. (C.E.) in the GregorianCalendar calendar (excluding ticks that would be added by leap seconds). For example, a ticks value of 31241376000000000L represents the date, Friday, January 01, 0100 12:00:00 midnight. A DateTime value is always expressed in the context of an explicit or default calendar. -- https://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx

然而,ISO 8601 确实有零年,但它指的是公历中的公元前 1 年。参见:https://en.wikipedia.org/wiki/ISO_8601#Years