减去2个时间戳并检查它们的区别

时间:2018-04-16 07:36:41

标签: java android timestamp seconds

我想找出2个时间戳之间的区别。我正在做的是在共享首选项中存储第一个时间戳 并尝试从新的时间戳中减去它。要获得时间戳,我正在使用 -

public static String setTimestamp() {
        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
            return dateFormat.format(new Date());
        } catch (Exception e) {
            return null;
        }
} 

如何减去2个时间戳并检查差异是否小于120秒?

2 个答案:

答案 0 :(得分:1)

你可以找到这样的差异

long diffInMs = firstTimestamp - secondTimestamp;

long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diffInMs);

现在你有几秒钟的差异所以请继续检查你的情况

if(diffInSec < 120){

}

答案 1 :(得分:0)

我建议使用以下内容获取用于保存到共享首选项的字符串:

    String timestampToSave = Instant.now().toString();

现在计算自该字符串中给出的时间以来的秒数:

    String timestampFromSharedPreferences = mySharedPrefs.getString(KEY, null);
    long diffInSeconds = Duration.between(Instant.parse(timestampFromSharedPreferences),
                                            Instant.now())
            .getSeconds();
    if (diffInSeconds < 120) {
        System.out.println("Less than 120");
    }

Instant是一个与时区无关的明确时间点。它的字符串表示类似于2018-04-16T09:26:27.929Z(ISO 8601)。最后Z表示UTC。因此,即使在用户更改设备的时区设置的情况下,或者程序的某些其他部分更改JVM的时区设置,上述操作也会起作用。您注意到我们不需要显式格式化器来格式化字符串并将其解析回Instant

如果您想比较2分钟而不是120秒,请使用toMinutes()代替getSeconds()

如果您无法更改共享首选项中保存的字符串,则需要指示时区设置尚未更改,然后解析字符串,如下所示:

    DateTimeFormatter timestampFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
    Instant storedTimestamp = LocalDateTime.parse(timestampFromSharedPreferences, timestampFormatter)
            .atZone(ZoneId.systemDefault())
            .toInstant();

现在让Duration像以前一样计算Instant个对象之间的差异。

我正在使用并推荐现代Java日期和时间API java.time。您使用的SimpleDateFormat课程已与Date一起过时,并且也是出了名的麻烦。现代API可以更好地使用。

问题:我可以在Android上使用java.time吗?

是的,java.time适用于较旧和较新的Android设备。它只需要至少Java 6

  • 在Java 8及更高版本和更新的Android设备上(来自API级别26,我被告知)现代API内置。
  • 在Java 6和7中获取ThreeTen Backport,新类的后端端口(适用于JSR 310的ThreeTen;请参阅底部的链接)。
  • On(较旧)Android使用Android版的ThreeTen Backport。它被称为ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

链接