Android当我从选择器中选择12月作为月份时,无法更新正确的日期

时间:2015-02-09 10:12:32

标签: android android-calendar android-timepicker

我正在尝试更新系统时间和日期。设置时间工作正常,因为我在我的应用程序中有系统权限和应用程序签名为系统应用程序也设置日期工作正常月份到11月,但当我选择12月作为月份它设置月份到1月。这一切都是我的原因我添加1个月但在一个案例中我不添加1它每月创建问题。如果我选择Dec它显示11月,如果我选择Jan它工作正常,当我选择2月它再次选择Jan,如果我选择March它选择2月。每次它设置比所选择的一个月少。

这是我的代码

 private TimePickerDialog.OnTimeSetListener timePickerListener = new     TimePickerDialog.OnTimeSetListener() {
@Override
 public void onTimeSet(TimePicker view, int hourOfDay, int minutes) {
 mHour   = hourOfDay;
 mMinute = minutes;

 Calendar c = Calendar.getInstance();
 c.set(mYear, mMonth+1, mDay, mHour, mMinute);

 Intent intent = new Intent();
 intent.setAction(Action);
 intent.putExtra("time", c.getTimeInMillis());
 getContext().sendBroadcast(intent);

    }
};
 private DatePickerDialog.OnDateSetListener datePickerListener = new     DatePickerDialog.OnDateSetListener() {
  @Override
  public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
  mYear = arg1;
  mMonth = arg2;
  mDay = arg3;

  mTimePickerDialog.show();
 }
};

在另一端

long when = intent.getLongExtra("time", -1);

    if (DEBUG)
        Log.i(TAG, "Incoming time: " + when);

    if (when / 1000 < Integer.MAX_VALUE) {
        SystemClock.setCurrentTimeMillis(when);
    }

    Time time = new Time();


    TvManager tvmng = TvManager.getInstance();
    TimerManager timerMgr = null;
    if(tvmng!=null)
        timerMgr = tvmng.getTimerManager();

    time.set(when);

    try {

        timerMgr.setClkTime(time, true);

    } catch (TvCommonException e) {

        e.printStackTrace();

    }

1 个答案:

答案 0 :(得分:1)

请更正下面提到的代码。

Calendar c = Calendar.getInstance();
c.set(mYear, mMonth, mDay, mHour, mMinute);

删除您在月份后添加的+1。 如果您在日历中设置月份,则应该在0到11之间设置月份,当您通过月份+1并且您的月份是11时那么它将是11 + 1 = 12并且日历将其视为1月而不是12月。

当您使用为了向用户显示而选择的日期时,您必须添加月份+ 1,以便显示确切的月份, 但是当你再次将它传递给日历时,为了存储用户选择存储它,如果你之前添加它而不添加+1,然后将它作为月-1,然后添加到日历对象。 它应该按照你的预期工作。

另外看看我解决问题的方法。

获取格式化日期以显示用户

 public static String getDate(Calendar calendar){
    String formattedDate;
    SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy");
    formattedDate=format.format(calendar.getTime());
    return formattedDate;
}

要从日期选择器中选择日期后将日期设置为日历实例,请使用如下所示。

 DialogFragment newFragment = new DatePickerDialogFragment() {

        @Override
        public void onDateSet(DatePicker datePicker, int year, int month, int day) {
            super.onDateSet(datePicker, year, month, day);
            Calender curDateInstance=Calender.getInstance();
            curDateInstance.set(Calendar.YEAR, year);
            curDateInstance.set(Calendar.MONTH, month);
            curDateInstance.set(Calendar.DAY_OF_MONTH, day);
            txtPickUpDate.setText(DateUtils.getDate(curDateInstance));


        }
    };