在我的应用中,我正在使用我的应用的上次开启日期显示Notification
。
这是我上次开放时间的代码,
long time = 0;
if (MainPageActivity.SettingsInfo != null)
time = System.currentTimeMillis() - MainPageActivity.SettingsInfo.getLong("LASTOPEN", 0);
获得差异,
String getTime(long ms)
{
final int SECOND = 1000;
final int MINUTE = 60 * SECOND;
final int HOUR = 60 * MINUTE;
final int DAY = 24 * HOUR;
String text;
if (ms > DAY) {
text=(ms / DAY)+(" Day(s) ago");
}
else
text=(ms / HOUR)+(" Hour(s) ago");
return text;
}
工作正常。但有时显示0小时前或某些不相关的日子,如1250天前。
我确信SettingsInfo不为null,并且在此代码运行时具有最后打开的信息。
我正在使用上面代码的alarm
。如果差异超过3天,则每天都会显示notification
。
SettingsInfo.edit().putLong("LASTOPEN", System.currentTimeMillis()).apply();
有人能解决这个问题吗?救救我!
答案 0 :(得分:0)
尝试抓住这个,
try
{
SettingsInfo.edit().putLong("LASTOPEN", System.currentTimeMillis()).apply();
}
catch (Exception e)
{
// Device couldn't provide time :p
}
并且没有“{}”的else语句可以吗? (只是好奇)
答案 1 :(得分:0)
您的代码运行正常,您正在 0小时前,因为您要将long
除以int
并打开您的应用
自上次开放以来1小时之前完成,您将始终获得0小时之前。
此外,正如@pskink指出的那样
您可以使用DateUtils.getRelativeTimeSpanString
获取相对时间跨度:
String getTime(long lastOpen) {
return DateUtils.getRelativeTimeSpanString(lastOpen, System.currentTimeMillis(), DateUtils.HOUR_IN_MILLIS).toString();
}
lastOpen :MainPageActivity.SettingsInfo.getLong("LASTOPEN", 0)