web-dev-qa-db-ja.com

SharedPreferencesで日付を保存および取得する方法

AndroidでSharedPreferencesにいくつかの日付を保存し、それを取得する必要があります。AlarmManagerを使用してリマインダーアプリを構築しています。将来の日付のリストを保存する必要がありますミリ秒として取得できる必要があります最初に、現在の現在時刻と将来の時刻の間の時間を計算し、共有設定で保存することを考えましたが、AlarmManagerに使用する必要があるため、この方法は機能しません。

52
Isuru Madusanka

正確な日付を保存およびロードするには、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));

編集

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();
}
149
Balázs Édes

あなたはこれを行うことができます:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.US);

日付を保存するには:

preferences .edit().putString("mydate", sdf.format(date)).apply();

取得するには:

try{
    Date date = sdf.parse(preferences.getString("myDate", "defaultValue"));
    } catch (ParseException e) {
                e.printStackTrace();
                               }

お役に立てば幸いです。

3
Fanny BATCHO