我需要在 android 的 SharedPreferences
中保存一些日期并检索它。我正在使用 AlarmManager
构建提醒应用程序,我需要保存 future 日期列表。它必须能够以毫秒为单位进行检索。首先,我想计算现在时间和 future 时间之间的时间并存储在共享偏好中。但该方法不起作用,因为我需要将它用于 AlarmManager
。
最佳答案
要保存和加载准确的日期,您可以使用 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));
编辑
如果你想额外存储 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();
}
关于java - 如何在 SharedPreferences 中保存和检索日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12343014/