每天只更新一次

时间:2012-11-22 14:34:44

标签: android date

我的Android应用程序中有些东西需要每天更新一次。

我认为这很简单,但我不知道我需要以什么格式格式化日期和时间(如果需要时间)以及如何检查今天是否已完成更新(今天是在00:01 am之间)用户当地时间23:59 pm。如果今天已经完成更新,则不应该进行更新。

以下是我知道该怎么做:

  • 将最后更新日期保存在SharedPreferences中(但我如何获得 它的字符串,我不知道)
  • 从SharedPreferences获取东西(但是我 不知道如何比较字符串格式的日期)

5 个答案:

答案 0 :(得分:9)

您选择的格式无关紧要。这只是重新计算的问题。

我建议使用epoch之后的毫秒,因为所有系统调用都使用它,所以你更容易使用它。

当1000毫秒是1秒时,很容易发现1000*60*60*24等于一天(24小时)。因此,如果storedMillis大于NOW - 1000*60*60*24,(而NOWSystem.currentTimeMillis()),那么检查还为时过早。如果storedMillis较小,请保存您的NOW时间戳并进行检查:

long now = System.currentTimeMillis();
long diffMillis = now - lastCheckedMillis;
if( diffMillis >= (3600000  * 24) ) {
  // store now (i.e. in shared prefs)

  // do the check
} else {
   // too early
}

修改

  

我有兴趣在应用程序首次打开时执行此操作   当天,即使最后一次更新是在10分钟前完成的。

这就是如何让适当的毫米进行比较的问题。使用以下代码块替换上面代码中的long now = System.currentTimeMillis();

Calendar cal = Calendar.getInstance();
cal.clear(Calendar.HOUR);
cal.clear(Calendar.HOUR_OF_DAY);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);

long now = cal.getTimeInMillis();

这将成功。

答案 1 :(得分:2)

如果您的日期格式为20121122(YYYYmmdd),那么您可以比较20121122> 20121123.但是在比较时它必须存储为int或强制转换为int。

答案 2 :(得分:1)

存储Last执行的时间戳(System.currentTimeMillis())并将其与当前执行进行比较。差异超过24小时...你知道吗?

答案 3 :(得分:1)

使用AlarmManager设置一个警报,每24小时执行一次,然后执行操作

请检查此问题:Alarm Manager Example

这是一种比其他方法更复杂的方法,但确保完成任务,而使用其他选项必须执行应用程序以检查是否必须更新任何内容。

答案 4 :(得分:0)

这是方法

public boolean runOnceADay() {
    SharedPreferences shp= c.getSharedPreferences(Constants.GENERAL_SHP, MODE_PRIVATE);
    SharedPreferences.Editor editor= shp.edit();
    long lastCheckedMillis = shp.getLong(Constants.ONCE_A_DAY, 0); // "KEY" you may change yhe value
    long now = System.currentTimeMillis();
    long diffMillis = now - lastCheckedMillis;
    if (diffMillis >= (3600000 * 24)) { // set up your time circulation
         editor.putLong(Constants.ONCE_A_DAY, now);
        editor.commit();
        Util.showMessage(c, "Once a Day Test");
        return false;
     } else {
        Util.showMessage(c, "Too Early");
        return true;
    }
}