2012-09-09 32 views
39

Necesito guardar algunas fechas en SharedPreferences en android y recuperarlo. Estoy construyendo la aplicación de recordatorio usando AlarmManager y necesito guardar la lista de fechas futuras. Debe poder recuperar en milisegundos. Primero pensé en calcular el tiempo entre hoy, hora actual y hora futura, y almacenar en preferencia compartida. Pero ese método no funciona, ya que necesito usarlo para AlarmManager.Cómo guardar y recuperar la fecha en SharedPreferences

Respuesta

131

Para guardar y cargar la fecha exacta, puede usar la representación long (número) de un objeto Date.

Ejemplo:

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

Usted puede usar esto para guardar o recuperar Date/Time datos de SharedPreferences como esto

Guardar:

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

Leer de nuevo:

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

Editar

Si desea almacenar el TimeZone adicionalmente, se podría escribir algún método de ayuda para ese propósito, algo como esto (no los he probado, no dude en corregirlo, si algo está mal):

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

Esto funciona. Debe marcarlo como correcto. – rplankenhorn

+0

Parece que de esta manera no es aplicable para las fechas específicas de la zona horaria. Caso de uso: almacenar fechas para el usuario viajero – Sergii

Cuestiones relacionadas