【问题标题】:How can I see if a Timestamp is more than X days ago in Java?如何在 Java 中查看时间戳是否超过 X 天前?
【发布时间】:2021-06-22 11:07:14
【问题描述】:

在我的 Firebase 数据库中,对于每个存在的项目,我都会保存它的创建日期并插入到数据库中。 日期使用 ServerValue.TIMESTAMP 保存,值保存为地图。如何在 Java 中将保存的值与今天的当前日期进行比较?

我需要知道商品的日期是否超过 14 天。谢了

【问题讨论】:

  • 这些日期在 Java 中是如何表示的?
  • 它们表示为地图
  • 这能回答你的问题吗? Compare timestamp with actual time (Java)
  • 你会想要Instant.ofEpochSecond
  • @chrylis-cautiouslyoptimistic- Instant.ofEpochMilli() 因为时间戳有 13 位,而不仅仅是 10。

标签: java android firebase date timestamp


【解决方案1】:

屏幕截图中的数字表示从纪元开始的毫秒数,您可以使用 Instant.ofEpochMilli 将其转换为 Instant。拥有Instant 后,您可以将其转换为其他日期时间类型,例如

import java.time.Instant;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(1616686018322L), ZoneOffset.UTC);
        System.out.println(zdt);
        ZonedDateTime now = ZonedDateTime.now(ZoneOffset.UTC);
        if (now.minusDays(14).isAfter(zdt)) {
            System.out.println("The item is 14 or more days older");
        } else {
            System.out.println("The item less than 14 days older");
        }
    }
}

输出:

2021-03-25T15:26:58.322Z
The item less than 14 days older

请注意,上面显示的比较考虑了所有单位(精度高达纳秒)。但是,如果您只想比较日期(而不是日期和时间),您可以在 ZonedDateTime#toLocalDate 上执行比较。

Trail: Date Time 了解有关现代日期时间 API 的更多信息。

【讨论】:

  • 我怎样才能只比较天数?
  • if (now.minusDays(14).toLocalDate().isAfter(zdt.toLocalDate())) { //... }
猜你喜欢
  • 2017-01-13
  • 2017-08-27
  • 2014-11-10
  • 2011-08-12
  • 1970-01-01
  • 2012-12-27
  • 2018-08-15
  • 2017-11-29
  • 2022-07-07
相关资源
最近更新 更多