【问题标题】:DatePicker shows wrong value of monthDatePicker 显示错误的月份值
【发布时间】:2011-05-26 22:51:09
【问题描述】:

当我使用getMonth() 方法时,我在android 中的DatePicker 出现问题,然后它将返回错误的值。

例如:

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 date datepicker


【解决方案1】:

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

API 返回的索引加 1 即可得到传统的单索引月份,这很简单。

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

【讨论】:

  • 如果您有一个包含月份名称的数组,您希望月份索引为零以匹配此数组。日子没有这个问题,任何人都希望有一个数字。
【解决方案2】:

在 Android 中,当您从日期选择器中选择一个日期时,它会从 0 开始计算月份。因此,这意味着返回的月份值始终是月份-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);

【讨论】:

    【解决方案3】:

    我能想到为什么会出现在Java util中的原因如下:

    考虑从 1 月 1 日到 1 月 31 日的日子。

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

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

    因此一月至十二月被称为 0-11。

    【讨论】:

      【解决方案4】:

      这里没有错误。 Calendar 类中的月份计数是从零开始的。 see this.

      【讨论】:

        【解决方案5】:

        您可以使用以下代码:

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

        【讨论】:

          【解决方案6】:
          if (month >= 0){
             month = month+1;
           }
           yourTextArea.setText(dayOfMonth+" / "+month+" / "+year);
          

          它对我有用。 希望它也对你有用。 吃睡密码重复?

          【讨论】:

            【解决方案7】:

            这是 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()
            

            【讨论】:

              猜你喜欢
              • 2018-10-24
              • 2018-07-04
              • 1970-01-01
              • 2011-10-03
              • 1970-01-01
              • 1970-01-01
              • 2018-06-28
              • 1970-01-01
              相关资源
              最近更新 更多