为什么是 1753?他们对 1752 有什么看法?我的曾曾曾曾曾曾曾祖父会非常生气。
使用 1753 年 1 月 1 日 ( 1753-01-01) 作为 SQL Server 中日期时间的最小日期值的决定可以追溯到其Sybase 起源。
1753-01-01
菲利普·斯坦霍普,第四代切斯特菲尔德伯爵。谁在英国议会通过了1750 年日历(新样式)法案。这立法为英国及其当时的殖民地采用公历。
1752 年,当最终从儒略历进行调整时,英国历法中有一些缺失的日子(互联网档案链接) 。1752 年 9 月 3 日至 1752 年 9 月 13 日丢失。
Kalen Delaney以这种方式解释了选择
那么,失去了 12 天,您如何计算日期?例如,如何计算 1492 年 10 月 12 日和 1776 年 7 月 4 日之间的天数?你包括那些失踪的 12 天吗?为了避免不得不解决这个问题,最初的 Sybase SQL Server 开发人员决定不允许 1753 年之前的日期。您可以使用字符字段存储更早的日期,但不能将任何日期时间函数用于存储在字符中的更早日期字段。
1753 年的选择似乎有点以盎格鲁为中心,但在英国实施之前,欧洲的许多天主教国家已经使用了 170 年(最初由于教会的反对而推迟)。相反,许多国家直到 1918 年在俄罗斯才改革他们的历法。事实上,1917 年的十月革命于公历 11 月 7 日开始。
中提到的两者datetime和新数据类型都没有尝试考虑这些本地差异,而只是使用公历。datetime2
datetime
datetime2
所以随着更大的范围datetime2
SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)
退货
Sep 8 1752 12:00AM
数据类型的最后一点datetime2是,它使用了在实际发明之前向后投影的预测公历,因此在处理历史日期时用途有限。
这与其他软件实现形成对比,例如 Java Gregorian Calendar类,该类默认遵循儒略历直到 1582 年 10 月 4 日,然后在新的公历中跳转到 1582 年 10 月 15 日。它正确处理了该日期之前的闰年儒略模型和该日期之后的公历模型。调用者可以通过调用来更改截止日期setGregorianChange()。
setGregorianChange()
可以在这里找到一篇相当有趣的文章,讨论采用日历的一些更多特性。