DatePicker显示错误的月份值

时间:2010-12-17 04:58:39

标签: android date datepicker

当我使用DatePicker方法时,我在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日那么它将于1987年6月7日返回

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

7 个答案:

答案 0 :(得分:74)

Android SDK中所述,月份从0开始编制索引。这意味着8月是8月,或索引7,从而为您提供正确的结果。

向API返回的索引添加1以获得传统的单索引月份是一件简单的事情。

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

答案 1 :(得分:30)

在Android中,当您从日期选择器中选择日期时,它会从0开始计算月份。因此,这意味着返回的月份值始终为月-1。

例如,如果选择八月(第8个月),则返回8-1 = 7.

这意味着您需要做的是将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);

答案 2 :(得分:3)

您可以使用以下代码:

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

答案 3 :(得分:3)

我可以想到为什么这在Java util中的原因如下:

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

像1月22日这样的一天可以被视为当年的 0个月+22天。 而2月15日可以表示为: 1个月+ 15天

同样,12月10日可以表示为: 11个月+ 10天

因此,Jan-Dec被称为0-11。

答案 4 :(得分:2)

这没有错误。 Calendar类中的月数计数为零。 see this.

答案 5 :(得分:0)

if (month >= 0){
   month = month+1;
 }
 yourTextArea.setText(dayOfMonth+" / "+month+" / "+year);

对我有用。 希望它也对您有用。 吃睡眠代码重复?

答案 6 :(得分:0)

这是 Kotlin 中的完整解决方案

private var mYear = 0
private var mMonth:Int = 0
private var mDay:Int = 0
private var updateDate: String = ""

显示日期选择器对话框

val c: Calendar  = Calendar.getInstance();
mYear = c.get(Calendar.YEAR)
mMonth = c.get(Calendar.MONTH)
mDay = c.get(Calendar.DAY_OF_MONTH)
val datePickerDialog = DatePickerDialog(
     requireContext(),
     OnDateSetListener { view, year, monthOfYear, dayOfMonth ->
          val date = SimpleDateFormat("dd/MM/yyyy").parse("$dayOfMonth/$monthOfYear/$year")
          updateDate = "$dayOfMonth/${monthOfYear+1}/$year"
          }, mYear, mMonth, mDay)
datePickerDialog.show()