Java >> Java チュートリアル >  >> Java

現在の年と月を取得すると、奇妙な結果が得られます

もう少し背景を説明します:

両方 new GregorianCalendar()Calendar.getInstance() 現在の日時で初期化されたカレンダーを正しく提供します。

MONTHYEAR 定数です Calendar 内 クラス。 してはいけない それらがオブジェクトの状態の一部であるように見せる参照を「介して」それらを使用します。 Calendar の設計の残念な部分です 異なるフィールドの値にアクセスするには、get を呼び出す必要があるクラス 他の回答に示されているように、これらの定数の1つとして指定されたフィールド番号で:

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 を使用します。Joda Time は Java 用のより優れた日付/時刻ライブラリです。確かに、Android ではスペースが少し限られているかもしれませんが、アプリで多くの日付/時刻操作を行う場合は、頭痛の種が大幅に軽減されます。

MONTHS は 0 から始まることに注意してください。実際の問題にマップする必要がある場合は、+1 を追加してください

int month=c.get(Calendar.MONTH)+1;

int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH);

   System.out.println(year);
   System.out.println(month);

Java タグ