0

我如何计算当前时间和另一个日期之间的秒数?

long time = myData - SystemClock.elapsedRealtime();
4

3 回答 3

2

System.currentTimeMillis()用来获取电流。然后System.currentTimeMillis()在偏移的时候再次使用。然后使用最新的并减去第一个。

SystemClock.elapsedRealtime(); 返回自启动以来的时间。不是一个具体的时间。

于 2013-07-11T18:28:32.327 回答
1

java.time

旧的日期时间 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()了返回 ZoneIdJVM 的。将其替换为适用的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 desugaringHow to use ThreeTenABP in Android Project

于 2021-05-06T11:30:50.617 回答
0

乔达时间

仅供参考,Joda-Time 提供Seconds课程。

long secs = Seconds.between( new DateTime( myGregCal.getTime() ), DateTime.now() ).getSeconds();
于 2014-06-17T07:45:17.203 回答