gpt4 book ai didi

java - 为什么 GregorianCalendar.getInstance 包含 Julian Calendar 类型的 calsys 和 cdate

转载 作者:行者123 更新时间:2023-11-30 07:38:46 25 4
gpt4 key购买 nike

我尝试将日期值设置为具有默认值的 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 仍然是 Julian Calendar。我不得不创建另一个公历实例来解决这个问题。

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 月之前的日期转换为使用 Julian 系统的原因。根据API如果你真的需要代表一个历史事件(这里的情况似乎不是这样)你只能从公元 4 年 3 月 1 日开始做

关于java - 为什么 GregorianCalendar.getInstance 包含 Julian Calendar 类型的 calsys 和 cdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1536148/

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