Oracle日期数据类型的范围:“公元前4712年1月1日至公元9999年12月31日”,该范围背后是否有任何逻辑?(Range for Oracle Date Data Type: “January 1, 4712 BC to December 31, 9999 AD”, Does the range has any logic behind it?)
Oracle日期数据类型的范围:“公元前4712年1月1日至公元9999年12月31日”,该范围背后是否有任何逻辑? 我的意思是该范围具有任何历史意义,或者它与编程和存储器大小等有关。我只是想知道,为什么只能从公元前4712年1月1日到公元9999年12月31日。
Range for Oracle Date Data Type: "January 1, 4712 BC to December 31, 9999 AD", Does the range has any logic behind it? I mean the range has any historic significance or it has something related to programming and memory size etc. I am just wondering, why only from January 1, 4712 BC to December 31, 9999 AD.
原文:https://stackoverflow.com/questions/3590404
更新时间:2019-07-23 06:53
最满意答案
That's the Julian date?
Wikipedia says 4713, hmm...off by 1...
I guess the upper limit is just because of the 4 digits.
Oracle doc says
Julian dates allow continuous dating by the number of days from a common reference. (The reference is 01-01-4712 years BCE, so current dates are somewhere in the 2.4 million range.)
EDIT
I guess the reason for 4712 instead of 4713 is that the conversion requires Y >= -4712:
2010-09-27
相关问答
Oracle中的DATE总是有一个日期组件和一个时间组件。 假设DISCOUNT表中的最后两列被声明为DATE ,Oracle很可能不会忽略时间组件。 什么使你相信时间部分被忽略? 我的猜测是你正在通过运行查询来检查数据 SELECT *
FROM discount
从SQL * Plus,SQL Developer,TOAD或其他一些GUI。 如果这样做,默认情况下,显示的日期将只有一个日期组件,而不是时间组件,这并不意味着时间组件被丢弃。 相反,它是具有不显示时间分量的默认NLS_DAT
...
您可以随时尝试: SQL> select to_timestamp( '9999-12-31 23:59:59', 'yyyy-mm-dd hh24:mi:ss' ) from dual;
TO_TIMESTAMP('9999-12-3123:59:59','YYYY-MM-DDHH24:MI:SS')
---------------------------------------------------------------------------
31-DEC-99 11.59.59.00
...
这是朱利安的约会? http://en.wikipedia.org/wiki/Julian_day 维基百科说4713,嗯...关闭1 ... 我想上限只是因为4位数。 Oracle doc说 http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#i1847 朱利安日期允许根据共同参考的天数连续约会。 (该参考文献是公元前01 - 01 - 4712年,因此当前日期在240万范围内。) 编辑 我猜47
...
尝试这个: declare @date as datetime
SET @date = '1/1/1901 12:00:00 AM'
SELECT @date, CASE WHEN @date IS NULL THEN 'date is null' ELSE 'date not null' END
Try this: declare @date as datetime
SET @date = '1/1/1901 12:00:00 AM'
SELECT @date, CASE WHEN @da
...
我现在手头没有Oracle,但这应该可以完成这项工作: 查找没有“跟随”行的所有行但排除当前没有后续行的最后一行(这就是为什么它是最后一行;)) select *
from tab_assignment_xx a
where not exists (select 1
from tab_assignment_xx b
where a.date_end + 1 = b.date_from
...
一如既往,阅读手册不正确。 01月份是2月份,而不是1月份。 要获得1月,请使用0。 日期()手册 As always, an incorrectly read manual. 01 as month is February, not January. To get January, use 0. Date() manual
这是因为e.timeStamp返回DOMHighResTimeStamp而不是DOMTimeStamp 。 这是非常少的。 由于它将日期设置为12/31/1969。 新的Date(),用当前的日期和时间创建一个新的日期对象。 您不需要在此明确设置时间: var date = new Date();
var clicked = date.toDateString();
That is because e.timeStamp returns DOMHighResTimeStamp and not D
...
建议1:如果要确保每一行都使用正确的SQL Server日期时间格式,可以在数据表中填充来自AccessDb的数据后编写一个foreach,并检查它是否小于1753/1/1 ......如果是,则指定有效值(null或GETDATE())。 建议2:您可以使用属性System.Data.SqlTypes.SqlDateTime.MinValue更新c#中的数据行。 (请在此处查看: https : //msdn.microsoft.com/en-us/library/system.data.sql
...
因为DateFormat也有一个TimeZone (并且您的系统未设置为UTC)。 您可以使用DateFormat.setTimeZone(TimeZone)更改它。 就像是 String myFormat = "MM/dd/yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(myFormat);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("Printable:
...
如果我不得不随机猜测它为什么不起作用,我会说这与Unix纪元时间有关 。 在2038年1月19日格林威治标准时间凌晨3:14:07之后,这个值在技术上会溢出(在32位机器上) - 所以在此之后的下一秒将被解释为格林尼治标准时间1970年1月1日0:00:01。 您提供的未来时间实际上可能会转换为过去的时间。 再次,这是一个完整的猜测,希望我可以在我的家用机器上下载VWD Express 2008后立即测试它。 编辑: 搜索此问题,我发现了类似的错误: http://framework.zend.c
...