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が返されます
間違いだと思いますが、理由を教えてください。
Android SDK で説明されているように、月は0から始まるインデックスが付けられます。つまり、8月は8月、つまりインデックス7であり、正しい結果が得られます。
APIによって返されるインデックスに1を追加するだけで、従来の1インデックス付き月を取得できます。
この動作は奇妙に思えるかもしれませんが、Java.util.Calendarクラスと一貫しています(joda.time.DateTimeと一貫性のあるnot)。
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);
次のコードを使用できます。
String mes = this.datepicker.getMonth()/10==0?("0"+this.datepicker.getMonth()):
String.valueOf(this.datepicker.getMonth());
これがJava utilにある理由を考えることができる理由は次のとおりです。
1月1日から1月31日までの日を検討します。
1月22日のような日は、その年の月+ 22日と見なすことができます。一方、2月15日は次のように記述できます。1か月+ 15日その年。
同様に、12月10日は、その年の11か月+ 10日で表されます。
したがって、Jan-Decは0-11と呼ばれます。
これにはエラーはありません。 Calendarクラスの月のカウントはゼロベースです。 これを参照