如何计算now和Android Studio中的RFC3339时间戳之间的差异?

时间:2020-06-19 17:05:54

标签: java android-studio datetime rfc3339

我正在通过带有JSON对象的服务器在我的应用程序中导入一些传感器数据。它们包含上次测量的值和时间。

时间采用 RFC3339 格式,以字符串形式发送,例如2020-06-19T15:32:25.528Z

现在,我不想显示上次测量的时间,而是要显示 now 测量之间的时间差。 / p>

搜索时,我发现既没有将RFC3339时间戳字符串解析为可编辑格式的好方法,也没有找到与现在的差异的方法。 我唯一看到的是this文章,但无法在我的应用程序中导入 datetime 类。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

搜索时,我发现解析RFC3339时间戳都不是一个好的解决方案 字符串为可编辑的格式,也不是计算差异的方法 现在。

使用java.time.Duration

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // Given date-time
        LocalDateTime ldt = ZonedDateTime
                .parse("2020-06-19T15:32:25.528Z",
                        DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz").withZone(ZoneId.systemDefault()))
                .toLocalDateTime();

        // Get the duration between the given date-time and now
        Duration duration = Duration.between(ldt, LocalDateTime.now(ZoneId.systemDefault()));

        // Get hours, minutes, seconds from the Duration object
        System.out.printf("%d hours %d minutes %d seconds%n", duration.toHoursPart(), duration.toMinutesPart(),
                duration.toSecondsPart());
    }
}

输出:

3 hours 3 minutes 43 seconds

[更新]

请注意,Duration#toXXXXXPart()例如Duration#toHoursPart()是Java-9引入的。如果您使用的是Java-8,则可以使用如下所示的计算:

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // Given date-time
        LocalDateTime ldt = ZonedDateTime
                .parse("2020-06-19T15:32:25.528Z",
                        DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz").withZone(ZoneId.systemDefault()))
                .toLocalDateTime();

        // Get the duration between the given date-time and now
        Duration duration = Duration.between(ldt, LocalDateTime.now(ZoneId.systemDefault()));

        // Get hours, minutes, seconds from the Duration object
        System.out.printf("%d hours %d minutes %d seconds%n", duration.toHoursPart(), duration.toMinutesPart(),
                duration.toSecondsPart());

        // For Java-8
        long hours = duration.toHours();
        int minutes = (int) ((duration.getSeconds() % (60 * 60)) / 60);
        int seconds = (int) (duration.getSeconds() % 60);
        System.out.printf("%d hours %d minutes %d seconds%n", hours, minutes, seconds);
    }
}

[另一个更新] 礼貌Ole V.V.

import java.time.Duration;
import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        // Given date-time
        Instant instant = Instant.parse("2020-06-19T15:32:25.528Z");

        // Get the duration between the given date-time and now
        Duration duration = Duration.between(instant, Instant.now());

        // Get hours, minutes, seconds from the Duration object
        System.out.printf("%d hours %d minutes %d seconds%n", duration.toHoursPart(), duration.toMinutesPart(),
                duration.toSecondsPart());
    }
}
相关问题