【问题标题】:Check if Date is before today regardless hour Java检查日期是否在今天之前,无论小时Java
【发布时间】:2021-08-27 07:43:06
【问题描述】:

大家好!

我正在尝试比较 java 中的两个日期,以知道一个是否在实际日期之前,但它也会比较时间,所以无论是同一天,它都会说它是因为将它们与时间进行比较。有什么方法可以知道日期是否早于当天,而不是时间?

这是我正在使用的代码(日期来自一个时代

long timestampDate = 1623307684;
Date date = new Date((long)timestampDate*1000);
if(date.before(Calendar.getInstance().getTime()))
{
    System.out.println("Was yesterday");
}
else
{
    System.out.println("Is today");
}

感谢您的宝贵时间!

【问题讨论】:

  • 你可以使用LocalDate类。
  • 重新打开它,因为重复的目标不完全匹配。这个问题与重复目标有两点不同:(1)它需要将纪元秒数转换为Instant。 (2) 重复的目标只讨论之前/之后的场景,而这个问题还需要确定时间戳是否指的是 Yesterday
  • 我建议你不要使用DateCalendar。这些课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time APILocalDate

标签: java date datetime time


【解决方案1】:

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用,改用2014年3月发布的modern Date-Time API*

使用现代日期时间 API java.time 的解决方案:

import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;

public class Main {
    public static void main(String[] args) {
        long timestampDate = 1623307684L;
        Instant instant = Instant.ofEpochSecond(timestampDate);

        // Replace JVM's timezone, ZoneId.systemDefault() with the applicable timezone
        // e.g. ZoneId.of("Etc/UTC")
        LocalDate date = instant.atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate today = LocalDate.now(ZoneId.systemDefault());
        if (date.isBefore(today)) {
            System.out.println("The given timestamp is for a date in the past.");
            // ...
        }

        if (date.equals(today.minusDays(1))) {
            System.out.println("Yesterday");
        }
    }
}

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


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

【讨论】:

  • 嗨 Arvind Kumar Avinash,谢谢你的回答,我正在尝试使用这个时间戳 1623308351,即今天,但更早,仍然说是昨天,作为对你上次编辑的回应,我不仅需要日期是否是昨天,我还需要知道是否在实际日期之前。为此提供上下文,就是检查应用程序上的当前登录是否是一天中的第一个。
  • @ToastBread - 我的代码有两种情况:(1)时间戳是否指过去的日期(2)时间戳是否指昨天。该代码不会打印 Yesterday 因为时间戳是今天的日期。检查输出online。 API 有很多选项。如果您需要任何进一步的帮助,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
相关资源
最近更新 更多