DatePicker显示错误的月份值

我在android中使用getMonth()方法时,在DatePicker中有一个问题,那么它将返回一个错误的值。

例如:

 DatePicker datepicker=new DatePicker(); int day=date.getDayOfMonth(); int month=date.getMonth(); int year=date.getYear(); t.setText(""+day+" / "+month+" / "+year); 

如果我将selectAug 06 1987,那么它将在6/7/1987返回

我认为这是一个错误,如果不告诉我的原因,请。

如Android SDK中所述,月份从0开始索引。这意味着8月份是8月份或索引7,因此会给您正确的结果。

将API返回的索引加1即可获得传统的单索引月份。

尽pipe这种行为看起来很奇怪,但它与java.util.Calendar类一致(尽pipe与joda.time.DateTime不一致)。

在Android中,当您从dateselect器中selectdate时,它将从0开始计算月份。因此,这意味着返回的月份值始终是月份1。

例如,您select八月(第八个月),然后返回8-1 = 8。

这意味着您需要做的是将1从DatePicker中获得月份值。 你可以这样做:

 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()); 

这里没有错误。 Calendar类中的月份计数为零。 看到这个。

我可以想到为什么这是在Java实用程序的原因如下:

考虑1月1日至1月31日的日子。

如1月22日的一天可以被认为是当年的0个月+ 22天 。 而2月15日则可以表述为:当年1个月+ 15天

同样的十二月十日可以表示为:当年11个月+ 10天

因此1月至12月被称为0-11。