2015-02-09 2 views
0

Я пытаюсь обновить системное время и дату. Время установки работает нормально, так как у меня есть системные разрешения в моем приложении, а приложение - подписями, так как системное приложение также устанавливает дату, отлично подходит для месяцев с января по ноябрь, но когда я выбираю декабрь в качестве месяца, то он устанавливает месяц в январе. Это все является причиной i я добавляю 1 к месяцу, но в случае, когда я не добавляю 1, он создает проблему для каждого месяца. если я выбираю Dec, это показывает ноябрь, если я выбираю Jan, он отлично работает. Когда я выбираю Feb, он снова выбирает Jan. Если я выбираю March, он выбирает Feb каждый раз, когда он устанавливает на один месяц меньше выбранного.Android Невозможно обновить правильную дату, когда я выбираю декабрь как месяц из сборщика

вот мой код

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(); 

    } 
+0

Это может быть [это андроид ошибка] (https://code.google.com/p/android/issues/detail?id=39692). Откуда у вас дата или время? – JonasCz

+0

Я разрешаю моему пользователю установить дату и время с помощью выбора времени и даты. –

+0

Нет, я не сталкиваюсь с этой ошибкой в ​​качестве выбора даты, что позволяет мне выбрать декабрь и да, моя система работает на желе. –

ответ

1

Пожалуйста, исправьте код, как указано ниже.

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

удалить +1, добавленный вами после месяца. Когда вы устанавливаете месяц в календаре, он должен быть от 0 до 11, когда вы пройдете месяц +1, а ваш месяц - 11, тогда будет 11 + 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; 
} 

Чтобы установить дату Calender экземпляра после выбора даты выбора даты использовать его, как показано ниже.

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)); 


     } 
    }; 
+0

да, вы правы, но в случае, если я не добавляю, это создает еще одну проблему. когда я выбираю какой-либо месяц, он показывает свой предыдущий месяц. –

+0

если я выбираю Dec, это показывает ноябрь, если я выбираю Jan, он отлично работает. Когда я выбираю Feb, он снова выбирает Ян, –

+0

, можете ли вы отправить код вашего выбора даты.? – Pinakin