当我使用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日返回
我认为这是一个错误,如果不是请告诉我原因。
答案 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()