gpt4 book ai didi

java - Java 中日期 31-12-9999 的问题

转载 作者:搜寻专家 更新时间:2023-11-01 04:03:21 32 4
gpt4 key购买 nike

我的程序需要将此日期表示为 java.sql.date 对象,但似乎当我创建一个新日期(使用日历)并将其设置为“9999-12-31”并最终转换此 java .util.date 对象转换为 java.sql.date 对象,此日期将转换为类似于“000-01-31”的内容。

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;
}

但是,这个问题是在我规范化日期之前出现的,我将其规范化以试图解决这个问题。

最佳答案

月份是零索引的。使用 11 表示十二月,而不是 12。这就是您要翻过这一年的原因。

关于java - Java 中日期 31-12-9999 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9483873/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com