android-java.lang.IllegalArgumentException当两个日期之间没有天数差时

android-java.lang.IllegalArgumentException当两个日期之间没有天数差时,java,android,illegalargumentexception,android-date,Java,Android,Illegalargumentexception,Android Date,在我的应用程序中,我使用以下代码计算旧日期和新日期之间的天数差。它在安卓2.2和2.3.6设备上运行良好,但在安卓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 shar

在我的应用程序中,我使用以下代码计算旧日期和新日期之间的天数差。它在安卓2.2和2.3.6设备上运行良好,但在安卓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)
原因:java.lang.IllegalArgumentException
位于java.util.Date.parse(Date.java:506)
在java.util.Date.(Date.java:149)
位于com.xxx.zzz.MainActivity.onCreate(MainActivity.java:65)
看看这部分

calculate_difference(date, new Date(old_date));

//and earlier
old_Date = date.toString();
显然,您不能再从
字符串
实例化
日期
对象。你必须想个办法,但我建议使用
SimpleCalendar
DateFormat
-使用
DateFormat
将字符串存储在SharedReference中。

是自java1.1以来不推荐使用的方法,不能保证按预期的方式运行

如果您有字符串并希望将其转换为日期,请使用

DateFormat df = DateFormat.getDateInstance();
myDate = df.parse(myString);

下面是

我建议存储毫秒而不是日期字符串。作为奖励,您可以使用表示毫秒的长参数实例化日期。

可能使用带有时间戳的日期:

System.currentTimeMillis();

根据日期格式,您可以使用以下代码

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);

简单地说,它不在代码中,而是因为parse()失败而初始化日期的方式。尝试改用SimpleCalendar。嗨。。我也有同样的错误。你找到解决办法了吗?请帮忙me@Shalini,我使用currentTimeMillis()计算两天之间的时间。受保护的long calculate_dateDifference(long newerDate,long olderDate){return(newerDate-olderDate)/(1000*60*60*24)}@murali_ma谢谢。。这对我帮助很大lot@Shalini不客气。什么是df?是dataformat吗?@murali_ma:用相关代码更新了答案。谢谢,我在计算差异时出现了空指针异常,我没有时间调试代码,所以我使用System.currentTimeMillis();。