检查日期是否在今天之前,无论时间如何

问题描述 投票:0回答:1

我正在尝试比较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");
}
java date datetime time
1个回答
4
投票

java.util
日期时间 API 及其格式化 API
SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 2014 年 3 月发布的现代日期时间 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:日期时间了解有关现代日期时间 API 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7。正在为 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请检查 通过脱糖可用的 Java 8+ API 如何在 Android 项目中使用 ThreeTenABP

© www.soinside.com 2019 - 2024. All rights reserved.