您的位置:首页 > 其它

TimePickerDialog和DatePickerDialog使用及问题解决

2016-04-16 00:35 543 查看
 protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ButterKnife.bind(this);calendar = Calendar.getInstance();mYear = calendar.get(Calendar.YEAR);mMonthOfYear = calendar.get(Calendar.MONTH);mDayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);minute = calendar.get(Calendar.MINUTE);date.setText(mYear + "-" + (mMonthOfYear + 1) + "-" + mDayOfMonth);time.setText(hourOfDay + ":" + minute);}
  /*** 实例化一个DatePickerDialog的对象* 第二个参数是一个DatePickerDialog.OnDateSetListener匿名内部类,当用户选择好日期点击done会调用里面的onDateSet方法*/private void showDateDialog() {DatePickerDialog datePickerDialog = new DatePickerDialog(AddMeetingActivity.this, new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {date.setText(year + "-" + (monthOfYear + 1) + "-" + dayOfMonth);mYear = year;mMonthOfYear = monthOfYear;mDayOfMonth = dayOfMonth;calendar.set(year, monthOfYear, dayOfMonth);checkDate();}}, mYear, mMonthOfYear, mDayOfMonth);datePickerDialog.show();}
  /*** 实例化一个TimePickerDialog的对象* 第二个参数是一个TimePickerDialog.OnTimeSetListener匿名内部类,当用户选择好时间后点击done会调用里面的onTimeset方法*/private void showTimeDialog() {TimePickerDialog timePickerDialog = new TimePickerDialog(AddMeetingActivity.this, new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {time.setText(hourOfDay + ":" + minute);calendar.setTimeInMillis(System.currentTimeMillis());calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);calendar.set(Calendar.MINUTE, minute);calendar.set(Calendar.SECOND, 0); // 设为 0calendar.set(Calendar.MILLISECOND, 0); // 设为 0calendar.set(mYear, mMonthOfYear, mDayOfMonth);checkDate();}}, hourOfDay, minute, true);timePickerDialog.show();}
/*** 检查日期是否符合*/private void checkDate() {Calendar now = Calendar.getInstance();LogUtil.Log("date", "now=" + now.getTime());LogUtil.Log("date", "set=" + calendar.getTime());if (now.after(calendar)) {Snackbar.make(subject, "会议时间早于当前时间!", Snackbar.LENGTH_LONG).show();checkDate = false;} else {checkDate = true;}}
以上为正确代码.我在做这个时遇到一个问题,就是检查时间符合时
checkDate()
如果先点的日期后点的时间选择,calendar的日期总会被重置为当前日期.
   calendar.setTimeInMillis(System.currentTimeMillis());calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);calendar.set(Calendar.MINUTE, minute);calendar.set(Calendar.SECOND, 0); // 设为 0calendar.set(Calendar.MILLISECOND, 0); // 设为 0calendar.set(mYear, mMonthOfYear, mDayOfMonth);
正确的做法就是设置好时间后,对calendar重新设置年月日,并且要注意的是,必须按照上面的顺序设定!否则年月日还是会被重置为当前日期!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: