首页 > 解决方案 > 如何获取 Firebase TIMESTAMP 和当前时间之间的小时数?

问题描述

我正在开发一个具有“任务”功能的应用程序。在任务中,用户必须完成几个可用的任务。任务完成后,我想禁用该任务 15 小时。我正在使用 Firebase 存储数据,我将“时间戳”存储为每个“任务”的子项。每次完成任务时都会更新“时间戳”。现在,当用户在应用程序中打开“任务”屏幕时,我想检查每个任务,如果它自上次完成以来已经 15 小时。我似乎无法弄清楚如何获得“时间戳”和当前时间之间的小时数。我需要的只是一个提示/方向。任何帮助是极大的赞赏。

标签: javaandroidfirebasetime

解决方案


如果您的时间戳以 UTC 格式存储为日期和时间:

    LocalDateTime firebaseDateTimeInUtc = LocalDateTime.of(2018, Month.FEBRUARY, 9, 16, 30);
    long hours = ChronoUnit.HOURS.between(
            firebaseDateTimeInUtc.atOffset(ZoneOffset.UTC),
            OffsetDateTime.now(ZoneOffset.UTC));
    System.out.println(hours);

刚刚运行这个打印

2246

如果您的时间戳是 ISO 8601 格式的字符串:

    String firebaseInstantString = "2018-02-09T16:29:46.789Z";
    long hours = ChronoUnit.HOURS.between(
            Instant.parse(firebaseInstantString), Instant.now());

或者,如果您要存储自纪元以来的毫秒数(这是低级的):

    long firebaseTimestampMillis = 1_518_193_786_789L;
    long hours = TimeUnit.MILLISECONDS.toHours(
            System.currentTimeMillis() - firebaseTimestampMillis);

在我使用的前两个片段中java.time,现代 Java 日期和时间 API。当您将 ThreeTanABP 添加到您的 Android 项目时,您可以在不太新的 Android 设备上使用它。

链接


推荐阅读