Установить дату в DatePicker, но не текущую, а в виде milliseconds из БД

Есть активити для редактирования записей, из БД загружаются ранее сохраненные данные в том числе в textview календаря в виде milliseconds. Эта дата корректно отображается в textview, но при сохранении Calendar сохраняет не ранее загруженную дату из БД, а текущую на устройстве. Если открыть календарь, то в диалоговом окне будет выбрана тоже текущая дата, а не загруженная из БД.

    private static String getDate(long millisFromDB, String dateFormat) {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.getDefault());
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(millisFromDB);
    return simpleDateFormat.format(calendar.getTime());
}

private void setInitialDate() {
    textViewCalendar.setText(DateUtils.formatDateTime(this, calendar.getTimeInMillis(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR));
}

DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month);
        calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        setInitialDate();
    }
};

public void changeDate(View view) {
    new DatePickerDialog(this, date, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();
}

Как установить в DatePicker дату из БД в виде milliseconds?

Извините, если такой вопрос уже был, но 3й день поисков ни к чему не привёл. Спасибо.

Выбранная текущая дата (7 февраля), а не загруженная из БД (3 февраля)


Ответы (1 шт):

Автор решения: dev.ex

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

public class ActivityEdit extends AppCompatActivity {

    Calendar calendarFromDB = Calendar.getInstance();

При получении даты из БД установить её только что созданому календарю

    long currentMillis = cursorId.getLong(1) * 1000;
    calendarFromDB.setTimeInMillis(currentMillis);

И в методах с DatePicker использовать этот календарь

private void setInitialDate() {
    textViewCalendar.setText(DateUtils.formatDateTime(this, calendarFromDB.getTimeInMillis(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR));
}

DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
        calendarFromDB.set(Calendar.YEAR, year);
        calendarFromDB.set(Calendar.MONTH, month);
        calendarFromDB.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        setInitialDate();
    }
};

public void changeDate(View view) {
    new DatePickerDialog(this, date, calendarFromDB.get(Calendar.YEAR), calendarFromDB.get(Calendar.MONTH), calendarFromDB.get(Calendar.DAY_OF_MONTH)).show();
}

Теперь при открытии календаря DatePicker устанавливает дату из БД, а если не открывать календарь, то сохранится дата так же из БД.

Дата устанавливается из БД

→ Ссылка