web-dev-qa-db-ja.com

DatePickerが間違った月の値を表示する

DatePicker in AndroidでgetMonth()メソッドを使用すると、間違った値を返します。

例えば:

DatePicker datepicker=new DatePicker();

int day=date.getDayOfMonth();
int month=date.getMonth();
int year=date.getYear();

t.setText(""+day+" / "+month+" / "+year);

1987年8月6日を選択すると、6/7/1987が返されます

間違いだと思いますが、理由を教えてください。

48
Alok Kumar

Android SDK で説明されているように、月は0から始まるインデックスが付けられます。つまり、8月は8月、つまりインデックス7であり、正しい結果が得られます。

APIによって返されるインデックスに1を追加するだけで、従来の1インデックス付き月を取得できます。

この動作は奇妙に思えるかもしれませんが、Java.util.Calendarクラスと一貫しています(joda.time.DateTimeと一貫性のあるnot)。

74
PearsonArtPhoto

Androidでは、日付ピッカーから日付を選択すると、0から月のカウントが開始されます。したがって、返される月の値は常にmonth-1になります。

たとえば、8月(8月)を選択すると、8-1 = 7が返されます。

つまり、DatePickerから取得する月の値に1を加算するだけです。

これは次の方法で実行できます。

DatePicker datepicker = new DatePicker();

int day   = date.getDayOfMonth();
int month = date.getMonth()+1;  // here I added 1 to the month
int year  = date.getYear();

t.setText(day+" / "+month+" / "+year);
31
Mehul Ranpara

次のコードを使用できます。

String mes = this.datepicker.getMonth()/10==0?("0"+this.datepicker.getMonth()): 
String.valueOf(this.datepicker.getMonth());
3
Brian Pando

これがJava utilにある理由を考えることができる理由は次のとおりです。

1月1日から1月31日までの日を検討します。

1月22日のような日は、その年の月+ 22日と見なすことができます。一方、2月15日は次のように記述できます。1か月+ 15日その年。

同様に、12月10日は、その年の11か月+ 10日で表されます。

したがって、Jan-Decは0-11と呼ばれます。

3
Kapil Jituri

これにはエラーはありません。 Calendarクラスの月のカウントはゼロベースです。 これを参照

2
MegaMind