Подтвердить что ты не робот

Как сохранить и получить дату в SharedPreferences

Мне нужно сохранить несколько дат в SharedPreferences в android и получить его. Я создаю напоминание с помощью AlarmManager, и мне нужно сохранить список будущих дат. Он должен иметь возможность получать миллисекунды. Сначала я подумал рассчитать время между сегодняшним временем и временем и сохранить в общих предпочтениях. Но этот метод не работает, так как мне нужно использовать его для AlarmManager.

4b9b3361

Ответ 1

Чтобы сохранить и загрузить точную дату, вы можете использовать представление long (число) объекта Date.

Пример:

//getting the current time in milliseconds, and creating a Date object from it:
Date date = new Date(System.currentTimeMillis()); //or simply new Date();

//converting it back to a milliseconds representation:
long millis = date.getTime();

Вы можете использовать это для сохранения или извлечения данных Date/Time из SharedPreferences, как это показано

Сохранить

SharedPreferences prefs = ...;
prefs.edit().putLong("time", date.getTime()).apply();

Прочтите его обратно:

Date myDate = new Date(prefs.getLong("time", 0));

Edit

Если вы хотите сохранить TimeZone дополнительно, вы можете написать какой-то вспомогательный метод для этой цели, что-то вроде этого (я их не тестировал, не стесняюсь его исправить, если что-то не так):

public static Date getDate(final SharedPreferences prefs, final String key, final Date defValue) {
    if (!prefs.contains(key + "_value") || !prefs.contains(key + "_zone")) {
        return defValue;
    }
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(prefs.getLong(key + "_value", 0));
    calendar.setTimeZone(TimeZone.getTimeZone(prefs.getString(key + "_zone", TimeZone.getDefault().getID())));
    return calendar.getTime();
}

public static void putDate(final SharedPreferences prefs, final String key, final Date date, final TimeZone zone) {
    prefs.edit().putLong(key + "_value", date.getTime()).apply();
    prefs.edit().putString(key + "_zone", zone.getID()).apply();
}