我的Android应用程序中有些东西需要每天更新一次。
我认为这很简单,但我不知道我需要以什么格式格式化日期和时间(如果需要时间)以及如何检查今天是否已完成更新(今天是在00:01 am之间)用户当地时间23:59 pm。如果今天已经完成更新,则不应该进行更新。
以下是我知道该怎么做:
答案 0 :(得分:9)
您选择的格式无关紧要。这只是重新计算的问题。
我建议使用epoch之后的毫秒,因为所有系统调用都使用它,所以你更容易使用它。
当1000毫秒是1秒时,很容易发现1000*60*60*24
等于一天(24小时)。因此,如果storedMillis
大于NOW - 1000*60*60*24
,(而NOW
即System.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;
}
}