如何在SharedPreferences中存储一个Date对象?

19

能否使用SharedPreferences存储Date对象?

实际上,在我的代码中,我有一个String变量、booleanDate。这是我用来存储所有对象(除Date外)的函数。请给我建议,如何才能存储Date对象?

private void SavePreferences() {

    String key="1";
    String value="hello";

    int x=5;

    Date currentDate=new Date();

    SharedPreferences sharedPreferences = getPreferences(MODE_APPEND);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);

    editor.putInt("2",5);

    editor.commit();
}

我的问题是如何使用SharedPreferences存储Date

4个回答

30
editor.putLong("THE_DATE", currentDate.getTime());

你可以像这样从首选项中读取Date

long millis = sharedPreferences.getLong("THE_DATE", 0L);
Date theDate = new Date(millis);

当我存储数据后,再次打开应用程序时,我有一个重置按钮。一旦我点击重置按钮,是否可能删除我使用shredPreferences存储的所有这些数据? - AndroidDev
1
简单而精彩的回答。 - Hugo M. Zuleta

3

设置日期时间

SharedPreferences sharedPreferences = getPreferences(MODE_APPEND);
SharedPreferences.Editor editor = sharedPreferences.edit();
Date dt = getSomeDate();
editor.putLong(dateTimeKey, dt.getTime());

获取日期时间
long myDate = sharedPreferences.getLong(dateTimeKey, new Date().getTime()); 

你不能使用关键字 long 作为变量名。 - Gabriel Negut
抱歉,我已经更改为myDate了,感谢您的建议。 - Xorsat

1

您可以使用SharedPreferences以这种方式存储日期值

editor.putLong("date",currentDate.getTime());

1
Date作为格式化的String,例如:
//for putting
Date myDate;
final String FORMAT="yyyy-MM-dd";
String prefData=SimpleDateFormat(FORMAT).format(myDate);
editor.putString("Date", prefDate);

//for reading
prefDate=settings.getString("Date", "");
Date date=new SimpleDateFormat(FORMAT).parse(prefDate);

或者你可以将毫秒数设为长整型


好的,没问题,但是当我尝试存储我的第二个日期时,它会覆盖存储的第一个日期。那么如何保持不覆盖呢?每次添加日期时都能存储新的日期而不覆盖以前的日期。 - AndroidDev
使用不同的键存储第二个数据,例如putString("date1", myDate1)和putString("date2", myDate2); - Barmaley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接