我正在尝试比较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.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。