的最大值和最小值日我看到到處都是,對獲得的最小和最大的日期我必須使用:獲取java.sql.date
Date dateModificationMin = new Date(Long.MIN_VALUE);
Date dateModificationMax = new Date(Long.MAX_VALUE);
但我做我的java.sql。日期是回報: 055-12-02最短日期 994-08-17最大日期
我該怎麼辦才能獲得java.sql.date的最大值和最小值?
的最大值和最小值日我看到到處都是,對獲得的最小和最大的日期我必須使用:獲取java.sql.date
Date dateModificationMin = new Date(Long.MIN_VALUE);
Date dateModificationMax = new Date(Long.MAX_VALUE);
但我做我的java.sql。日期是回報: 055-12-02最短日期 994-08-17最大日期
我該怎麼辦才能獲得java.sql.date的最大值和最小值?
如果你的代碼與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日期怎麼走crasy:
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
答案是數據庫特定的,而不是在Java或JDBC或java.sql types被發現。數據庫之間可能的日期時間值限制巨大。
例如:
TIMESTAMP WITH TIME ZONE
具有範圍BC 4713的到AD 294276。TIMESTAMP
類型的範圍爲'1970-01-01 00:00:01.000000'至'2038-01-19 03:14:07.999999'UTC。 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至1月1日至11月9999年12月31日,從00:00:00至23:59:59.9999999(注意7小數部分,比微秒更細,但比納秒更粗)。也有1753年1月1日的datetime
with range,直到9999年12月31日,以及時間00:00:00至23:59:59.997。而不是確定絕對限制,我建議你在將來和過去選擇任意點,並將其用作限制。在軟件和應用程序的整個生命週期中,遠遠超出價值的範圍遠遠超過大多數數據庫的限制。在您的應用中將限制硬編碼爲常量,例如Java中的枚舉。
Stack Overflow上的其他貼子顯示,對於這個尋找日期時間值的問題,沒有簡單的答案來用作未知或尚未確定值的佔位符(我認爲這是背後的目的問題)。
你能解釋你的用例嗎? 'java.sql.Date'是基於'Date'類的糟糕的實現,無論如何,每個DBMS都有自己的'Date'意味着什麼以及它的範圍是什麼的定義。那麼爲什麼你需要這些值? – RealSkeptic
這是研究一些客戶。管理員用戶可以選擇用戶創建的最大和最小日期。但他不必這樣做。所以在他不選擇的情況下,我必須在我的sql請求中放置最小和最大日期。 – Kvasir
那麼,爲什麼你不建立一個不同的查詢,當管理員不限制日期? – RealSkeptic