27

私はAndroidに関連する学習プロジェクトに取り組んでいます。以下のコードを使用して現在の年と月を取得しようとしていますが、機能しません。

GregorianCalendar gc = new GregorianCalendar();
gc.YEAR // returning 1       
gc.MONTH // returning 2

Calendar c = Calendar.getInstance();
c.YEAR // returning 1       
c.MONTH // returning 2

誰かが私を助けることができますか?私は何か間違ったことをしていますか?私はJava開発に不慣れです。ご容赦ください。ありがとう。

4

6 に答える 6

71

もう少し背景を説明するために:

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

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

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 ではスペースが少し限られているかもしれませんが、アプリで多くの日付/時刻操作を行う場合は、頭痛の種が大幅に軽減されます。
于 2012-04-15T11:55:25.867 に答える
22

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

int month=c.get(Calendar.MONTH)+1;
于 2013-12-08T08:34:47.573 に答える
5
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH);

   System.out.println(year);
   System.out.println(month);
于 2012-04-15T11:36:10.387 に答える
3
于 2016-12-16T03:33:24.850 に答える
3
Calendar c= Calendar.getInstance()
int cyear = c.get(Calendar.YEAR);//calender year starts from 1900 so you must add 1900 to the value recevie.i.e., 1990+112 = 2012
int cmonth = c.get(Calendar.MONTH);//this is april so you will receive  3 instead of 4.
int cday = c.get(Calendar.DAY_OF_MONTH);

このリンクを参照してください

于 2012-04-15T11:36:28.360 に答える