-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

public Date(文字列文字列)はjava1.1以降非推奨のメソッドであり、期待どおりに動作することが保証されていません。

文字列があり、それを日付に変換したい場合は、

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

これがDateFromatjavadocです

于 2012-11-02T14:52:21.750 に答える
0

日付文字列の代わりにミリ秒を保存することをお勧めします。おまけとして、ミリ秒を表す long パラメータを使用して日付をインスタンス化できます。

于 2012-11-02T15:01:38.977 に答える
0

この部分を見て

calculate_difference(date, new Date(old_date));

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

Date明らかに、からオブジェクトをインスタンス化することはできなくなりましたString。何かを理解する必要がありますが、and を使用することをお勧めしSimpleCalendarますDateFormat- を使用しDateFormatて String を SharedPreferences に保存します。

于 2012-11-02T14:50:54.313 に答える
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 に答える
0

おそらくタイムスタンプ付きの日付を使用してください:

System.currentTimeMillis();
于 2012-11-02T15:11:34.940 に答える