当我按下按钮显示DatePickerDialog时,对话框显示更长一个月。例如,如果我使用这样的当前日期(使用joda库的DateTime)启动:
DateTimeZone zone = DateTimeZone.forID("Europe/Athens");
DateTime dt = new DateTime(zone);
int year = dt.getYear();
int month = dt.getMonthOfYear();
int day = dt.getDayOfMonth();
这是2014年8月7日,日期对话框显示更大的一个月07/09/2014。 我不明白为什么会这样。
表示datePickerFragment的片段是:
@SuppressLint("ValidFragment")
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
@SuppressLint("ValidFragment")
TextView txtDate;
GlobalData appState;
public DatePickerFragment(TextView txtDate) {
super();
this.txtDate = txtDate;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
DateTimeZone zone = DateTimeZone.forID("Europe/Athens");
DateTime dt = new DateTime(zone);
int year = dt.getYear();
int month = dt.getMonthOfYear();
int day = dt.getDayOfMonth();
Log.i("DatePickerFragment day month year", day +" "+ month + " "+ year + "");
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
appState.setDateUserFrom(year, month, day);
Log.i("Date day month yerar", "Date changed." + day+" " + month + " " +year);
txtDate.setText(new StringBuilder().append(day)
.append("-").append(month).append("-").append(year)
.append(" "));
}
}
答案 0 :(得分:9)
DatePickerDialog获取monthOfYear
0 to 11
[0表示1月... 11表示12月],而DateTime
返回1 to 12
。因此,您需要使用月份值-1
。
使用此:
return new DatePickerDialog(getActivity(), this, year, month - 1, day);
答案 1 :(得分:2)
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
DateTimeZone zone = DateTimeZone.forID("Europe/Athens");
DateTime dt = new DateTime(zone);
int year = dt.getYear();
int month = dt.getMonthOfYear()-1;
int day = dt.getDayOfMonth();
Log.i("DatePickerFragment day month year", day +" "+ month + " "+ year + "");
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
日期选择器中的月份从零开始。所以你应该从getMonthOfYear()中减去一个来在datepicker上设置它。
答案 2 :(得分:0)
试着希望它有效:
DateTimeZone zone = DateTimeZone.forID("Europe/Athens");
DateTime dt = new DateTime(zone);
int year = dt.getYear();
int month = dt.getMonth();
int day = dt.getDayOfMonth();
OR
DateTimeZone zone = DateTimeZone.forID("Europe/Athens");
DateTime dt = new DateTime(zone);
int year = dt.getYear();
int month = dt.getMonthOfYear() - 1;
int day = dt.getDayOfMonth();
答案 3 :(得分:0)
我很确定这背后的原因是因为Android DatePickerDialog需要基于0的月份值。 Jodatime按照您的预期返回它们(更加人性化)。所以只需从月中减去1。
为了澄清,大多数日期函数/库默认设计为基于0的月份值。唯一的例外是明确指出的,或像Jodatime这样的第三方图书馆,这使得日期工作变得愉快。
答案 4 :(得分:0)
只是一个猜测。 Joda月份从1月1日开始,但java日期为0?因此,如果您使用当前日期init与joda,日期选择器将显示错误的月份。简单的解决方案:
month = dt.getMonthOfYear() - 1;