Android DatePicker выходной день месяца один?

1

Я пытаюсь создать временную метку unix, используя диалоги datepicker и timepicker, но проблема заключается в том, что день всегда отключен одним. Например. если я выберу 10 мая, он отобразит 11 мая в качестве выхода. Однако все остальное не работает. Любые предложения были бы замечательными.

Код даты и времени выглядит следующим образом:

private DatePickerDialog.OnDateSetListener mDateSetListener =
    new DatePickerDialog.OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, 
                              int monthOfYear, int dayOfMonth) {
            mYear = year;
            mMonth = monthOfYear;
            mDay = dayOfMonth;
        }
    };

private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        mHour = hourOfDay;
        mMinute = minute;
        confirmDateChange();
    }
};

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this,
                    mDateSetListener,
                    mYear, mMonth, mDay);
    case TIME_DIALOG_ID:
    return new TimePickerDialog(this,
            mTimeSetListener, mHour, mMinute, false);          
    }
    return null;
}

Затем я вызываю это, чтобы получить временную метку

 private long componentTimeToTimestamp(int year, int month, int day, int hour, int minute) {

    Calendar c = Calendar.getInstance();
    c.set(Calendar.YEAR, year);
    c.set(Calendar.MONTH, month);
    c.set(Calendar.DAY_OF_MONTH, day);
    c.set(Calendar.HOUR, hour);
    c.set(Calendar.MINUTE, minute);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);       
    return (c.getTimeInMillis()/1000L);        
}

И, наконец, это устанавливает значение в текстовом виде, но, как я уже сказал, день месяца всегда отключен одним

    long mydate = componentTimeToTimestamp(mYear, mMonth, mDay, mHour, mMinute);   
    long datemod = mydate * 1000;
    final java.util.Date d = new java.util.Date(datemod);       
    details.setText(d.toLocaleString());
  • 0
    Я думаю, что toLocaleString () устарела. Сверху головы я забываю, что именно является нынешним предпочтительным способом. Я думаю, что это класс DateFormat. Вы можете попытаться использовать это, чтобы превратить вашу длинную в dateStr и посмотреть, если это имеет значение. Если он постоянно отключен одним всегда, было бы быстрее и проще, но, конечно, не «правильно» просто откатить день назад, прежде чем отобразить его.
  • 0
    Слова метода хороши тем, что я использую его для добавления меток времени в базу данных и их получения. Это отлично работает: длинная метка времени = дата * 1000; java.util.Date d = новая java.util.Date (отметка времени); mDate.setText (d.toLocaleString ());
Показать ещё 3 комментария
Теги:
date
datepicker
timepicker

1 ответ

2

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

 c.set(year, month, day, hour, minute, 0);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню