JAVA表示9999循环_Java中日期31-12-9999的問題

我的程序需要將此日期表示爲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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值