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