2

我尝试将日期值设置为具有默认值的 PreparedStatement,但该值有时会作为 JulianValue 返回。例如(假设 spanBegin 和 spanEnd 为空)

Calendar cal = new GregorianCalendar();
if (spanBegin == null) {
    cal.set(0000, Calendar.JANUARY, 1);
    spanBegin = cal.getTime();
}

if (spanEnd == null)
{
    cal.set(9999, Calendar.DECEMBER, 31);
    spanEnd = cal.getTime();
}

在第 3 行,由于日期 0000 年 1 月 1 日由儒略历限定,因此 CDate 变为儒略历。但是,下一个 Date 即使是在 9999 年,它的 CDate 仍然是儒略历。我不得不创建另一个公历实例来解决这个问题。

Calendar cal = new GregorianCalendar();
if (spanBegin == null) {
    cal.set(0000, Calendar.JANUARY, 1);
    spanBegin = cal.getTime();
}

Calendar cal = new GregorianCalendar();
if (spanEnd == null)
{
    cal.set(9999, Calendar.DECEMBER, 31);
    spanEnd = cal.getTime();
}

问题是,这是日期对象的预期行为还是错误?实际上使用 GregorianCalendar.getInstance() 表明 cdate 有时设置为 JulianCalendar。

4

3 回答 3

2

直到 1582 年才出现公历。儒略历在整个欧洲都在使用,直到由于太阳年不完全是 365.25 天,但比那个少一点而开始出现小问题。为了解决问题,教皇格里高利十三世下令将日历更改为我们今天所知道的 - 除以 100 的每一年都不是闰年,除非它除以 400。 1582 年 10 月发生了过渡 - 4 后的第二天Oct 是 10 月 15 日。这意味着在 1582 年 10 月之前,公历和儒略历是相同的。你可以在这里阅读更多关于它的信息

这就是为什么将 1582 年 10 月之前的日期转换为使用儒略系统的原因。根据API如果你真的需要代表一个历史事件(这似乎不是这里的情况)你只能从 4AD 3 月 1 日开始

于 2009-10-08T07:51:24.440 回答
1

您使用的是什么版本的 Java 以及在什么操作系统上?您真的需要将日期存储在 0 年和 9999 年,还是只是将这些日期用作“负无穷大”和“正无穷大”值?你怎么看日历是儒略历?

我试过这个:

Calendar cal = Calendar.getInstance();

cal.set(0, Calendar.JANUARY, 1);
Date d1 = cal.getTime();

cal.set(9999, Calendar.DECEMBER, 31);
Date d2 = cal.getTime();

System.out.println(d1);
System.out.println(d2);

输出(在 Windows XP 上,使用 Sun Java 1.6.0_16):

Thu Jan 01 09:53:56 CET 1 java.util.Date
Tue Dec 31 09:53:56 CET 9999 java.util.Date

它将第 0 年更改为第 1 年。更改代码以使用第二个日历对象作为第二个日期:

Calendar cal = Calendar.getInstance();

cal.set(0, Calendar.JANUARY, 1);
Date d1 = cal.getTime();

Calendar cal2 = Calendar.getInstance();
cal2.set(9999, Calendar.DECEMBER, 31);
Date d2 = cal2.getTime();

System.out.println(d1);
System.out.println(d2);

Date这不会改变两个对象的输出或内容。

注意:请注意,以 0 开头的整数文字(例如0000在您的代码中)将被 Java 编译器解释为八进制数。在这种情况下这无关紧要,因为数字是 0,但如果您不将整数文字表示为八进制数,则不应在整数文字前加上零。

于 2009-10-08T08:02:11.190 回答
1

儒略历中没有 0 年。它从公元前1年到公元1年。

于 2009-10-08T15:44:51.173 回答