我随处可见获得我必须使用的日期的最小值和最大值:
Date dateModificationMin = new Date( Long.MIN_VALUE );
Date dateModificationMax = new Date( Long.MAX_VALUE );
但是我在我的java.sql.date上做了它返回: 055-12-02为最小日期 994-08-17为最大日期
如何获取java.sql.date的最大值和最小值?
答案 0 :(得分:6)
答案是特定于数据库的,不能在Java或JDBC或java.sql types中找到。数据库之间的可能日期时间值的限制非常。
例如:
TIMESTAMP WITH TIME ZONE
的射程为公元前4713年至公元294276年。TIMESTAMP
类型的范围为' 1970-01-01 00:00:01.000000'至' 2038-01-19 03:14:07.999999'世界标准时间。 DATETIME
值的范围为' 1000-01-01 00:00:00.000000'至' 9999-12-31 23:59:59.999999',9999
年。TIMESTAMP
从1753年1月1日到9999年12月31日,准确度为百分之三秒或3.33毫秒。我找不到他们的主要参考页面,也没有找到刚刚宣布的版本3的更新。datetime2
类型的范围为0001-01-01至9999-12-31至CE 1月1,1日至9999年12月31日,时间为00:00:00至23:59:59.9999999 (注意分数的7位数,比微秒更精细但比纳秒更粗糙)。 1753年1月1日至9999年12月31日,以及时间00:00:00至23:59:59.997 datetime
with range。我建议您在将来和过去选择任意点,而不是确定绝对限制,并将其作为限制使用。远远超出了在软件和应用程序的生命周期中遇到的价值,但远远超出了大多数数据库的限制。将限制硬编码为应用程序中的常量,例如Java中的枚举。
Stack Overflow上的其他帖子表明,对于查找日期时间值以用作未知或尚未确定的值的占位符这一问题,没有简单的简单答案(我假设这是背后的目的)问题)。
答案 1 :(得分:2)
如果您执行java.util.Date的代码,您将获得
dateModificationMin = Sun Dec 02 17:47:04 CET 292269055
dateModificationMax = Sun Aug 17 08:12:55 CET 292278994
我猜,带有负长时间戳的日期工作错误,因此最短日期为
new Date(0)== Thu Jan 01 01:00:00 CET 1970
由于java.sql.date扩展了java.util.Date,问题可能是相同的
带
long timestamp = -10;
for (int i = 0; i < 20; i++) {
System.out.println("timestamp = " + timestamp + " date = " + (new Date(timestamp)));
timestamp*=10;
}
你得到:
timestamp = -10 date = Thu Jan 01 00:59:59 CET 1970
timestamp = -100 date = Thu Jan 01 00:59:59 CET 1970
timestamp = -1000 date = Thu Jan 01 00:59:59 CET 1970
timestamp = -10000 date = Thu Jan 01 00:59:50 CET 1970
timestamp = -100000 date = Thu Jan 01 00:58:20 CET 1970
timestamp = -1000000 date = Thu Jan 01 00:43:20 CET 1970
timestamp = -10000000 date = Wed Dec 31 22:13:20 CET 1969
timestamp = -100000000 date = Tue Dec 30 21:13:20 CET 1969
timestamp = -1000000000 date = Sat Dec 20 11:13:20 CET 1969
timestamp = -10000000000 date = Sun Sep 07 07:13:20 CET 1969
timestamp = -100000000000 date = Mon Oct 31 15:13:20 CET 1966
timestamp = -1000000000000 date = Sun Apr 24 23:13:20 CET 1938
timestamp = -10000000000000 date = Mon Feb 10 07:13:20 CET 1653
timestamp = -100000000000000 date = Thu Feb 26 15:13:20 CET 1200
timestamp = -1000000000000000 date = Tue Nov 16 23:13:20 CET 29720
timestamp = -10000000000000000 date = Sun Feb 01 07:13:20 CET 314912
timestamp = -100000000000000000 date = Mon Mar 08 15:13:20 CET 3166840
timestamp = -1000000000000000000 date = Sun Feb 24 23:13:20 CET 31686119
看看-1 * 10 ^ 15之后日期如何变得黯淡 还有java.sql.Date:
timestamp = -10000000000000 date = 1653-02-10
timestamp = -100000000000000 date = 1200-02-26
timestamp = -1000000000000000 date = 720-11-16
timestamp = -10000000000000000 date = 912-02-01
timestamp = -100000000000000000 date = 840-03-08
timestamp = -1000000000000000000 date = 119-02-24
timestamp = 8446744073709551616 date = 634-03-09
timestamp = -7766279631452241920 date = 582-01-06
这里错了!! :d