如何在 android studio java 中检查更新日期是否大于当前日期

how to check if update date is greater then current date in android studio java

我想更改特定 table 行的背景可绘制对象,根据它们的状态与更新后的状态相比 date/time 与当前时间相比,并检查自上次更新以来是否已经过了 24 小时 date/time 并设置不同的背景可绘制对象。

到目前为止我得到的是有效的,但我不知道如何检查它是否是 24 小时,而不仅仅是大于当前时间

   JobRepository jobRepository = new JobRepository(a.getApplication());
        jobRepository.findEnquiry().observe(getViewLifecycleOwner(), jobsEnquiry -> {
        TableRow[] tableRows = new TableRow[jobsEnquiry.size()];

        for (int i=0; i<jobsEnquiry.size(); i++) {
            Job job = jobsEnquiry.get(i).job;
            tableRows[i] = new TableRow(a);
            tableRows[i].setId(i + 1);
            tableRows[i].setPadding(0,20,0,20);
            if(job.getStatus().equals("Left message/Awaiting reply")){
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd H:m:s");
                Date updatedDate = job.getUpdatedAt();
                Date date = job.getDate();
                Date currentTime = Calendar.getInstance().getTime();
                tableRows[i].setBackgroundResource(android.R.drawable.list_selector_background);
                tableRows[i].setBackgroundResource(R.drawable.table_outline);

                if (updatedDate.getTime() < currentTime.getTime()){
                    tableRows[i].setBackgroundResource(android.R.drawable.list_selector_background);
                    tableRows[i].setBackgroundResource(R.drawable.table_outline_status);
                }

            }
            else if(job.getStatus().equals("Action required")){
                tableRows[i].setBackgroundResource(android.R.drawable.list_selector_background);
                tableRows[i].setBackgroundResource(R.drawable.table_outline_status);
            }

getTime()Date class 上的返回值是 long 参见:https://developer.android.com/reference/java/util/Date#getTime()

所以下面的代码可以工作,但它不能很好地处理时区。

private final long TWENTYFOUR_HOURS = TimeUnit.HOURS.toMillis(24);

if ((updatedDate.getTime() + TWENTYFOUR_HOURS) < currentTime.getTime()){
//Do something
}

if ((updatedDate.getTime() + TimeUnit.HOURS.toMillis(24)) < currentTime.getTime()){
//Do something
}

java.time 通过脱糖

考虑使用 java.time,现代 Java 日期和时间 API,作为您的日期和时间工作。此外,当您从遗留 API 中获得过时的 Date 对象时。首先将每个 Date 转换为现代 Instant

    Instant twentyfourHoursAgo = Instant.now().minus(24, ChronoUnit.HOURS);
    List<Date> dates = Arrays.asList(new Date(1_624_298_359_544L), new Date(1_624_240_459_544L),
            new Date(1_624_377_259_544L), new Date(1_624_297_759_544L));
    for (Date updatedDate : dates) {
        Instant updatedInstant = DateTimeUtils.toInstant(updatedDate);
        if (updatedInstant.isAfter(twentyfourHoursAgo)) {
            System.out.println("" + updatedDate + ": updated within 24 hours");
        } else {
            System.out.println("" + updatedDate + ": it has been 24 hours since last update");
        }
    }

当我运行一分钟前Europe/Copenhagen时区的代码输出:

Mon Jun 21 19:59:19 CEST 2021: updated within 24 hours
Mon Jun 21 03:54:19 CEST 2021: it has been 24 hours since last update
Tue Jun 22 17:54:19 CEST 2021: updated within 24 hours
Mon Jun 21 19:49:19 CEST 2021: it has been 24 hours since last update

我已经为 ThreeTen Backport 编写了代码(见下文)。它提供 DateTimeUtils 用于在老式类型和现代类型之间进行转换。如果使用脱糖或本机 java.time 从 DateInstant 的转换稍微简单一点,只需 updatedDate.toInstant()toInstant 方法已添加到 Date 在 Java 8).

问题:java.time 不需要 Android API 26 级吗?

java.time 在新旧 Android 设备上都能很好地工作。它只需要至少 Java 6.

  • 在 Java 8 和更新的 Android 设备上(从 API 级别 26)内置了现代 API。
  • 在非 Android Java 6 和 7 中获取 ThreeTen Backport,现代 类 的 backport(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在较旧的 Android 上使用脱糖或 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。在后一种情况下,请确保使用子包从 org.threeten.bp 导入日期和时间 类。

链接