-1

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

5 回答 5

0

看这部分

calculate_difference(date, new Date(old_date));

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

显然,您不能再DateString. 您必须弄清楚一些事情,但我建议使用SimpleCalendarDateFormat- 使用DateFormat将您的字符串存储在 SharedPreferences 中。

于 2012-11-02T14:50:54.313 回答
0

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

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

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

这是DateFromat javadoc

于 2012-11-02T14:52:21.750 回答
0

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

于 2012-11-02T15:01:38.977 回答
0

也许使用带有时间戳的日期:

System.currentTimeMillis();
于 2012-11-02T15:11:34.940 回答
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);
于 2012-11-02T15:15:55.573 回答