我尝试将日期值设置为具有默认值的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。
最佳答案
直到 1582 年才出现公历。整个欧洲都在使用儒略历,直到由于太阳年不完全是 365.25 天,而是比这少一点而开始出现一些小问题。为了解决这个问题,教皇格列高利十三世下令将历法改为我们今天所知道的——每年除以 100 的年份都不是闰年,除非它除以 400。1582 年 10 月发生了过渡——4 号后的第二天Oct 是 10 月 15 日。这意味着直到 1582 年 10 月,公历和儒略历都是相同的。您可以阅读更多相关信息here
这就是 1582 年 10 月之前的日期被转换为使用儒略系统的原因。根据API如果你确实需要代表一个历史事件(这里的情况似乎并非如此),你只能从公元 4 年 3 月 1 日开始执行
关于java - 为什么 GregorianCalendar.getInstance 包含儒略历类型的 calsys 和 cdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1536148/