以ms为单位的时差问题

时间:2018-04-02 04:48:01

标签: android datetime

在我的应用中,我正在使用我的应用的上次开启日期显示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();

有人能解决这个问题吗?救救我!

2 个答案:

答案 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)

中存储的时间