もう少し背景を説明するために:
new GregorianCalendar()
との両方Calendar.getInstance()
が、現在の日時で初期化されたカレンダーを正しく提供します。
MONTH
クラス内YEAR
の定数です。それらがオブジェクトの状態の一部であるように見える参照を「介して」それらを使用しないCalendar
でください。他の回答に示されているように、異なるフィールドの値にアクセスするには、これらの定数の1つとして指定されたフィールド番号で呼び出す必要があるのは、クラスの設計の残念な部分です:Calendar
get
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
月の数字は 0 から始まるので、この記事の執筆時点 (4 月) では月の数字は 3 になります。
型名だけでなく、その型の式を介して静的メンバー (定数など) を参照できるのは、Java 言語の設計の残念な部分です。
私の推奨事項:
- IDE で許可されている場合 (Eclipse のように)、
c.YEAR
コンパイル時にエラーが発生するような式を作成してください。常に を使用すると、コードがより明確になりますCalendar.YEAR
。
- 可能であれば、Joda Timeを使用してください。これは、Java 用のはるかに優れた日付/時刻ライブラリです。確かに、Android ではスペースが少し限られているかもしれませんが、アプリで多くの日付/時刻操作を行う場合は、頭痛の種が大幅に軽減されます。