我想找出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秒?
答案 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可以更好地使用。
是的,java.time
适用于较旧和较新的Android设备。它只需要至少Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
。java.time
向Java 6和7的后端(JST-310的ThreeTen)。