2012-09-09 15 views
39

Ho bisogno di salvare alcune date in SharedPreferences in Android e recuperarlo. Sto creando un'app di promemoria utilizzando AlarmManager e ho bisogno di salvare l'elenco delle date future. Deve essere in grado di recuperare come millisecondi. Per prima cosa ho pensato di calcolare il tempo tra oggi, ora e ora futura e memorizzare in preferenze condivise. Ma quel metodo non funziona dal momento che ho bisogno di usarlo per AlarmManager.Come salvare e recuperare la data in SharedPreferences

risposta

131

Per salvare e caricare una data precisa, è possibile utilizzare la rappresentazione long (numero) di un oggetto Date.

Esempio:

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

È possibile utilizzare questo per salvare o recuperare Date/Time dati da SharedPreferences come questo

Save:

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

Leggi indietro:

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

Modifica

Se si desidera memorizzare il TimeZone Additionaly, si potrebbe scrivere qualche metodo di supporto a tale scopo, qualcosa di simile (io non li ho ancora testato, sentitevi liberi di correggilo, se qualcosa non va):

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

Questo funziona. Dovresti contrassegnarlo come corretto. – rplankenhorn

+0

Sembra che questo modo non sia applicabile per le date specifiche del fuso orario. Caso d'uso: memorizza le date per l'utente che viaggia – Sergii

Problemi correlati