2012-09-09 7 views
39

Muszę zapisać kilka dat w SharedPreferences w systemie Android i pobrać. Buduję aplikację do przypomnienia, używając AlarmManager i muszę zapisać listę przyszłych dat. Musi być w stanie pobrać jako milisekundy. Najpierw pomyślałem, aby obliczyć czas pomiędzy dzisiejszym czasem, a czasem przyszłym i przechowywać we wspólnych preferencjach. Ale ta metoda nie działa, ponieważ muszę go używać do AlarmManager.Jak zapisać i pobrać datę w SharedPreferences

Odpowiedz

131

Aby zapisać i załadować dokładną datę, można użyć reprezentacji long (liczba) obiektu Date.

Przykład:

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

Można to wykorzystać, aby zachować lub odzyskać Date/Time dane z SharedPreferences jak ten

Save:

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

Czytaj to z powrotem:

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

Edit

Jeśli chcesz zapisać TimeZone dodatkowo, można napisać niektóre metody pomocnika w tym celu, coś takiego (ja ich nie testowane, nie krępuj się popraw to, jeśli coś jest nie tak):

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

To działa. Powinieneś oznaczyć to jako poprawne. – rplankenhorn

+0

Wygląda na to, że ta metoda nie ma zastosowania w przypadku dat specyficznych dla strefy czasowej. Przypadek użycia: daty przechowywania dla podróżującego użytkownika – Sergii