2012-09-09 9 views
39

안드로이드에 SharedPreferences에 몇 개의 날짜를 저장하고 검색해야합니다. AlarmManager을 사용하여 미리 알림 앱을 구축 중이며 향후 날짜 목록을 저장해야합니다. 밀리 초 단위로 검색 할 수 있어야합니다. 먼저 오늘 시간과 미래 시간 사이의 시간을 계산하고 공유 환경 설정에 저장하려고 생각했습니다. 하지만이 방법은 AlarmManager에 사용해야하므로 작동하지 않습니다.SharedPreferences에서 날짜를 저장하고 검색하는 방법

답변

131

정확한 날짜를 저장하고로드하려면 Date 개체의 long (숫자) 표현을 사용할 수 있습니다.

예 :

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

저장처럼 SharedPreferences에서 Date/Time 데이터를 저장하거나 검색하려면이 옵션을 사용할 수 있습니다

:

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

읽기 그것은 다시 :

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

편집

당신은 additionaly 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(); 
} 
+7

이것은 작동합니다. 올바른 것으로 표시해야합니다. – rplankenhorn

+0

이 방법은 시간대 별 날짜에는 적용되지 않습니다. 사용 사례 : 여행중인 사용자의 날짜 저장 – Sergii

관련 문제