为什么是1753年?他们有什么理由反对1752年?我的曾曾曾曾曾曾曾曾祖父会很生气。
当前回答
Incidentally, Windows no longer knows how to correctly convert UTC to U.S. local time for certain dates in March/April or October/November of past years. UTC-based timestamps from those dates are now somewhat nonsensical. It would be very icky for the OS to simply refuse to handle any timestamps prior to the U.S. government's latest set of DST rules, so it simply handles some of them wrong. SQL Server refuses to process dates before 1753 because lots of extra special logic would be required to handle them correctly and it doesn't want to handle them wrong.
其他回答
使用1753年1月1日(1753-01-01)作为SQL Server中datetime的最小日期值的决定可以追溯到Sybase起源。
然而,这个日期本身的意义可以归结于这个人。
菲利普·斯坦霍普,切斯特菲尔德伯爵第四世。他带领英国议会通过了1750年日历(新风格)法案。这为英国及其当时的殖民地采用公历制定了法律。
在1752年英国日历中有一些缺失的日子(互联网档案链接),当时终于对儒略历进行了调整。1752年9月3日至1752年9月13日失守。
卡伦·德莱尼是这样解释这个选择的
所以,浪费了12天,你怎么能 计算日期?比如,怎么能 计算两者之间的天数 1492年10月12日,1776年7月4日?做 你把失踪的12天也算进去了吗?来 避免解决这个问题, 最初的Sybase SQL Server 开发者决定不允许日期 在1753年之前。你可以提前存储 日期使用字符字段,但是 你不能使用任何datetime函数 你储存的较早的日期 在字符字段中。
选择1753年的日历似乎有点以英国为中心,因为在英国实施之前,许多欧洲天主教国家已经使用了170年的日历(最初由于教会的反对而推迟)。相反,许多国家直到1918年俄国才改革他们的历法。事实上,1917年十月革命是在公历的11月7日开始的。
Joe的回答中提到的datetime和新的datetime2数据类型都没有试图考虑这些本地差异,而是简单地使用公历。
datetime2的范围更大
SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)
返回
Sep 8 1752 12:00AM
关于datetime2数据类型的最后一点是,它使用向后投射到实际发明之前的预期公历,因此在处理历史日期方面用处有限。
这与其他软件实现形成对比,例如Java的公历类,默认遵循儒略历直到1582年10月4日,然后在新的公历中跳到1582年10月15日。它正确地处理了闰年日期之前的朱利安模型和该日期之后的格里高利历模型。调用者可以通过调用setGregorianChange()来更改转换日期。
在这里可以找到一篇相当有趣的文章,讨论了采用日历的更多特点。
对于那些真正想要一个巨大的惊喜的人。
如果您使用的是基于Linux/Unix的系统,那么您可以尝试以下包含cal命令的命令(如果它本身被使用,它将显示今天的日期)
cal 9 1752 ; cal
在线Linux终端,请点击这里。
1752年,英国从儒略历转向了公历。我相信1752年9月的两周从未发生过,这对该地区的日期有影响。
一个解释: http://uneasysilence.com/archive/2007/08/12008/(互联网档案版)
你的曾曾曾曾曾曾曾曾祖父应该升级到SQL Server 2008并使用DateTime2数据类型,该数据类型支持的日期范围从0001-01-01到9999-12-31。
Incidentally, Windows no longer knows how to correctly convert UTC to U.S. local time for certain dates in March/April or October/November of past years. UTC-based timestamps from those dates are now somewhat nonsensical. It would be very icky for the OS to simply refuse to handle any timestamps prior to the U.S. government's latest set of DST rules, so it simply handles some of them wrong. SQL Server refuses to process dates before 1753 because lots of extra special logic would be required to handle them correctly and it doesn't want to handle them wrong.
推荐文章
- 确定记录是否存在的最快方法
- 为什么Chrome浏览器不正确地确定页面是在不同的语言,并提供翻译?
- 解析日期字符串并更改格式
- 从现有模式生成表关系图(SQL Server)
- 我如何循环通过一组记录在SQL Server?
- 数据库和模式的区别
- 在Java中转换字符串到日历对象
- 如何在SQL Server中一次更改多个列
- 外键约束可能导致循环或多条级联路径?
- ZoneOffset之间的区别是什么。UTC和ZoneId.of(“UTC”)?
- 如何选择每一行的列值不是独特的
- 如何检查DST(日光节约时间)是否有效,如果是,偏移量?
- nvarchar(max)非文本
- 在SQL Server 2008 R2中重命名数据库时出错
- 将数据复制到另一个表中