如何在SharedPreferences中保存和检索date

我需要在Android中的SharedPreferences中保存几个date并检索它。 我使用AlarmManagerbuild立提醒应用程序,我需要保存未来date的列表。 它必须能够以毫秒为单位进行检索。 首先,我想从今天到现在的时间和未来的时间计算时间,并存储在共享的偏好。 但是这个方法不起作用,因为我需要将它用于AlarmManager

One Solution collect form web for “如何在SharedPreferences中保存和检索date”

要保存并加载准确的date,您可以使用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 ,你可以为此写一些辅助方法,像这样(我没有testing过,如果有什么错误,请随时纠正):

 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(); } 
  • 如何实现带有掩码的input
  • 确定Java中的文件创builddate
  • 如何在Java中增加一天的date?
  • iPhone:将datestring转换为相对时间戳
  • 如何在Android中获取当前date?
  • 如何获得一天的开始时间和结束时间?
  • SQL Developer只返回date,而不是时间。 我该如何解决?
  • PHP的date昨天
  • Safari中的dateparsing在safari和chrome中是不同的
  • 仅在Python中将datetime对象转换为datestring
  • 将MySqldate时间戳转换为JavaScript的date格式