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

时间:2012-11-02 14:46:42

标签: java android illegalargumentexception android-date

在我的应用程序中,我使用以下代码计算旧日期和新日期之间的天数差异。它在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)

5 个答案:

答案 0 :(得分:0)

看看这部分

calculate_difference(date, new Date(old_date));

//and earlier
old_Date = date.toString();

显然,您无法再从Date实例化String对象。你必须弄明白,但我建议使用SimpleCalendarDateFormat - 使用DateFormat将你的字符串存储在SharedPreferences中。

答案 1 :(得分:0)

public Date (String string)是自java 1.1以来不推荐使用的方法,不能保证按预期运行。

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

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

这是DateFromat javadoc

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