oracle 日期range,Oracle日期数据类型的范围:“公元前4712年1月1日至公元9999年12月31日”,该范围背后是否有任何逻辑?(Range for Oracle Date Data...

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

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值