Android 用の CalendarDisplay アプリケーションを作成しています。とりわけ、このアプリケーションでは、ユーザーがエポック (エポックは 1899 年の日付) に追加する日数を選択でき、その結果がディスプレイにグラフィカルに表示されます。ただし、カレンダーの値から日付の値を設定すると、予期しない結果が得られます。年は 1900 の値だけずれているようです。結果に 1900 を単純に追加することはできますが、私が行っていることから、それは間違った答えのように思えます。本によると(私は信じています)。または、私が持っているものを続けることもできます。それも機能します。しかし、それは同じ書籍の問題を共有しています。デバッグ用のスペア変数を含むコードは次のとおりです。
public void gotoCal(int days) {
// epochCal has been initialized as follows:
// (HYF_BASE_YEAR = 1899, HYF_BASE_MONTH = 11, HYF_BASE_DAY = 1)
// epochCal = (Calendar) Calendar.getInstance();
// epochCal.set(HYF_BASE_YEAR, HYF_BASE_MONTH, HYF_BASE_DAY);
Calendar cal = (Calendar) epochCal.clone();
cal.add(Calendar.DATE, days);
int year = cal.get(Calendar.YEAR);
Date date = cal.getTime();
int year2 = date.getYear();
if (year2 != year) {
date.setYear(year);
}
int year3 = date.getYear();
gotoDate(date);
}
ここで、このコードをデバッグ モードで gotoCal(40000) として実行し、gotoDate() 行にブレークポイントを設定すると、次の値がフィールドに表示されます: year = 2009 、 year2 = 109 、 year3 = 2009
Calendar.getTime() 関数は1900 年前の日付を返すことになっていますか (そのようなドキュメントは見たことがありません)。それとも、それを行うために影響を与えるために何かをしている可能性がありますか? または、他に何が間違っているのでしょうか?