1

我只是在做一堆旧数据库的导入,当我看着结果滚动时,我想知道,它如何/为什么知道将 12/31/13 转换为 12/31/2013,但是 12/31 /99 到 1999 年 12 月 31 日?(在这种情况下,“它”是 Python 的 strftime(%Y/%m/%d) 函数)

2050年会发生什么?12/31/50 的记录是否会默认解释为 2050、1950 或 2150?

我意识到它可能因语言而异,并且可能存在专门强制使用某个世纪的标志/选项。但是,当您没有明确这样做时,默认情况下是什么做出了判断?

4

3 回答 3

2

它因数据库而异,每个都有一个默认的时间跨度。

SQL Server 的默认时间跨度是:1950-2049,所以50变成1950,但是49变成2049

在 MySQL 和 Oracle 中1970-2069

在 Postgresql 中,它的中心是2020,所以无论哪一年最接近 2020 年,这似乎也是1970-2069

所有默认值都跨越未来,因此经常需要自定义标准。

两位数的年份可能会混淆,将2010-05-07其更改为两位数的年份,10-05-07?不,应该是05-07-10,至少在 SQL Server 中:

SELECT CAST('2010-05-07' AS DATE)  --  2010-05-07
      ,CAST('10-05-07' AS DATE)    --  2007-10-05
      ,CAST('05-07-10' AS DATE)    --  2010-05-07

无效日期通常可以很容易地确定提供的日期格式。

于 2014-01-30T16:53:21.663 回答
1

您必须阅读编译器文档。

更重要的是:尽可能不要使用 2 位数年份

于 2014-01-30T16:49:40.430 回答
0

大多数语言/DBMS 都有默认值,但允许将世纪中断设置为自定义值。

如果/如何可能,您应该检查文档。

于 2014-01-30T17:13:36.570 回答