0

アプリ内の更新データの最終日をプリファレンスに書き込みたい。だから私はこれが好きだった

Calendar cal = Calendar.getInstance();
SharedPreferences settings = getSharedPreferences("OrderOnline", 0);
Long updDate = settings.getLong("lastupdate", 0);
Long currdate= cal.getTimeInMillis();
if (!(updDate == currdate)) {
Log.d("AMainActivity", "updDate = " + updDate + "; currdate = " + currdate);
...
Editor ed = settings.edit();
        ed.putLong("lastupdate", currdate);
        ed.commit();
}

しかし、これは私が望むものではありません。SharedPreferences で現在の日付を読み書きするにはどうすればよいですか? 非推奨のオブジェクトは使用したくありません。ありがとうございました。

PS私は秒ではなく、設定で現在の日付が欲しいです。(!(updDate == currdate)) は常に True になります。

UPDこれを追加します

Calendar cal = Calendar.getInstance();
SharedPreferences settings = getSharedPreferences("OrderOnline", 0);
Long updDate = settings.getLong("lastupdate", 0)/ MILLIS_PER_DAY;
Long currdate= cal.getTimeInMillis()/ MILLIS_PER_DAY;
if (!(updDate == currdate)) {
  Log.d("AMainActivity", "updDate = " + updDate + "; currdate = " + currdate);


...
  Editor ed = settings.edit();
        ed.putLong("lastupdate", currdate);
        ed.commit();
}

これが結果です

03-07 13:10:15.031: D/AMainActivity(9291): updDate = 15771; currdate = 15771

何かがうまくいきません。

4

1 に答える 1

2

これを使用して、ミリ秒ではなく日を比較します。

long MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
long updDate = settings.getLong("lastupdate", 0) / MILLIS_PER_DAY;
long currdate= System.currentTimeMillis() / MILLIS_PER_DAY;

if (!(upDate == currDate)) ...

物事を証明するための短い単体テスト: これは、「今、私が思ったことです」と「ほら、うまくいく」と書いています。

public void test() throws InterruptedException {
    long MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
    long updDate = 0 / MILLIS_PER_DAY;
    long currDate = System.currentTimeMillis() / MILLIS_PER_DAY;

    if (!(updDate == currDate)) {
        System.out.println("now that's what I thought");
    }

    updDate = System.currentTimeMillis() / MILLIS_PER_DAY;
    Thread.sleep(5000);
    currDate = System.currentTimeMillis() / MILLIS_PER_DAY;

    if (!(updDate == currDate)) {
        System.out.println("now that's STRANGE");
    } else {
        System.out.println("see, it works");
    }
}
于 2013-03-07T12:53:11.810 に答える