我的程序需要將此日期表示爲java.sql.date對象,但似乎當我創建新日期(使用日曆)並將其設置爲' 9999-12-31',最後將此java.util.date對象轉換爲java.sql.date對象,該日期轉換爲'000-01-31'。Java中日期31-12-9999的問題
Calendar calendar = Calendar.getInstance();
calendar.set(9999, 12, 31);
infinityDate = new java.sql.Date(normalizeDate(calendar.getTime()).getTime());
infinityDate應該是31-12-9999 但是當我的代碼到達這裏:
if(otherDate.equals(infinityDate))
{// Do stuff}
它從未進入if條件爲infinityDate已經因某種原因被改爲31-01 -000,儘管otherDate實際上是'31 -12-9999'。
otherDate是31-12-9999的事實告訴我,java可以表示這個日期,但由於某種原因,當我使用日曆構造它時,它會更改日期。 (otherDate來自從數據庫提取數據的jdbc語句)
此引用日期'31 -12-9999'已被某些客戶端修復,所以它不能被更改,我的程序必須能夠比較一些傳入日期值與此。 有沒有人知道爲什麼會發生這種情況,我知道http://en.wikipedia.org/wiki/Year_10,000_problem可能是9999年後的日期問題,但我應該安全一天。
編輯:正規化日期的方法只有「標準化給定日期的那一天的午夜」
private static java.util.Date normalizeDate(java.util.Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
date = calendar.getTime();
return date;
}
但是,這樣問題就出現在我被歸之日起,我歸它,企圖修復這個。
+1
normalizeDate函數是做什麼的? –
2012-02-28 14:38:54
+0
我會建議不要使用這樣的「標記」日期。這是代表無關邏輯的脆弱方式。 –
2012-02-28 14:41:16
+0
@Rhhound正如我所指出的那樣,它不是我自己選擇的,這是我收到的一個需求規範的一部分。 –
2012-02-28 14:44:33