最佳方法检查java.util.Date是否超过30天与当前时间相比?

Ste*_*ers 4 java compare date

这就是我想要做的事情:

Date currentDate = new Date();
Date eventStartDate = event.getStartDate();
Run Code Online (Sandbox Code Playgroud)

如何检查eventStartDate是否比currentDate早30天?

我使用的是Java 8,不希望使用Calendar.

时区是ZoneId.systemDefault().

Jon*_*eet 9

好的,假设您确实希望它在默认时区内"30天",我会使用类似的东西:

// Implicitly uses system time zone and system clock
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime thirtyDaysAgo = now.plusDays(-30);

if (eventStartDate.toInstant().isBefore(thirtyDaysAgo.toInstant())) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果"三十天前"是围绕DST更改,您需要检查文档是否plusDays为您提供了所需的行为:

转换回ZonedDateTime时,如果本地日期时间处于重叠状态,则尽可能保留偏移量,否则将使用较早的偏移量.如果在间隙中,则本地日期时间将按间隙的长度向前调整.

或者你可以减去30"24小时"的天数,这肯定会更简单,但可能会在DST变化方面产生意想不到的结果.


gaR*_*Ros 5

你可以试试这个:

Date currentDate = new Date();
Date eventStartDate = event.getStartDate();
long day30 = 30l * 24 * 60 * 60 * 1000;
boolean olderThan30 = currentDate.before(new Date((eventStartDate .getTime() + day30)));
Run Code Online (Sandbox Code Playgroud)

这很伪装,但它应该可以完成工作!

  • 假设每天有 24 小时。这可能满足也可能不满足要求-目前尚不清楚:( (3认同)
  • 请记住在第一个数字(“30l”)后添加“l”,让您的编译器知道操作是在长数字上完成的 - 否则您将超出 Integer 的范围,结果将完全错误。 (3认同)