在我的应用程序中,我使用以下代码计算旧日期和新日期之间的天数差异。它在Android 2.2和2.3.6设备上运行良好,但在Android 4.0设备上它会被java.lang.IllegalArgumentException
崩溃。我不知道sdk 4.0不支持我的代码。请帮帮我。
我的代码是:
Date date;
String old_Date = null;
.....
date = new Date();
old_Date = date.toString(); // i am storing it in sharedPreference so that i convert to string
.......
date = new Date();
long diff = calculate_dateDifference(date,new Date(old_Date)); // line no 65.
...
和我的方法:
protected long calculate_dateDifference(Date newerDate, Date olderDate) {
return (newerDate.getTime() - olderDate.getTime()) / (1000 * 60 * 60 * 24);
}
我的示例日志猫:
Caused by: java.lang.IllegalArgumentException
at java.util.Date.parse(Date.java:506)
at java.util.Date.<init>(Date.java:149)
at com.xxx.zzz.MainActivity.onCreate(MainActivity.java:65)
答案 0 :(得分:0)
看看这部分
calculate_difference(date, new Date(old_date));
//and earlier
old_Date = date.toString();
显然,您无法再从Date
实例化String
对象。你必须弄明白,但我建议使用SimpleCalendar
和DateFormat
- 使用DateFormat
将你的字符串存储在SharedPreferences中。
答案 1 :(得分:0)
public Date (String string)是自java 1.1以来不推荐使用的方法,不能保证按预期运行。
如果您有字符串并希望将其转换为日期使用
DateFormat df = DateFormat.getDateInstance();
myDate = df.parse(myString);
答案 2 :(得分:0)
我建议存储毫秒而不是日期字符串。作为奖励,您可以使用表示毫秒的长参数来实例化日期。
答案 3 :(得分:0)
也许使用带时间戳的日期:
System.currentTimeMillis();
答案 4 :(得分:0)
根据您的日期格式,您可以使用以下代码
Date oldDate = new SimpleDateFormat("dd-MM-yyyy").parse("29-10-2012");
Date newerDate = new Date();
int dayInMillisecs = 1000 * 60 * 60 * 24;
int dayDifference = (int) ((newerDate.getTime() - oldDate.getTime()) / dayInMillisecs);