java求9 99 999 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、付费专栏及课程。

余额充值