我如何计算当前时间和另一个日期之间的秒数?
long time = myData - SystemClock.elapsedRealtime();
你System.currentTimeMillis()
用来获取电流。然后System.currentTimeMillis()
在偏移的时候再次使用。然后使用最新的并减去第一个。
SystemClock.elapsedRealtime(); 返回自启动以来的时间。不是一个具体的时间。
旧的日期时间 API(java.util
日期时间类型及其格式化 API SimpleDateFormat
)已过时且容易出错。建议完全停止使用它并切换到java.time
现代日期时间 API *。
使用现代 API 的解决方案:
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.GregorianCalendar;
public class Main {
public static void main(String[] args) {
// An arbitrary GregorianCalendar for demo - you will get it from object.getData
GregorianCalendar gcal = GregorianCalendar
.from(ZonedDateTime.of(2021, 5, 2, 10, 20, 30, 0, ZoneId.systemDefault()));
ZonedDateTime start = gcal.toZonedDateTime();
ZonedDateTime current = ZonedDateTime.now(ZoneId.systemDefault());
long seconds = ChronoUnit.SECONDS.between(start, current);
System.out.println(seconds);
}
}
输出:
353263
注意:在上面给出的代码中,我使用 ZoneId.systemDefault()
了返回 ZoneId
JVM 的。将其替换为适用的ZoneId
例如ZoneId.of("Europe/London")
。
从Trail: Date Time了解有关现代日期时间 API *的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和您的 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。
仅供参考,Joda-Time 提供Seconds
课程。
long secs = Seconds.between( new DateTime( myGregCal.getTime() ), DateTime.now() ).getSeconds();