日付値をデフォルト値の PreparedStatement に設定しようとしましたが、値が JulianValue として返されることがあります。例 (spanBegin と spanEnd が null であると仮定)
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 に設定される場合があることがわかります。