如果两个日期相等,则方法之前的日期返回false

Mah*_*leh 36 java date

将两个日期与方法前的日期进行比较时,如果日期相似,则返回false,如下所示:

  • date1:​​Tue Dec 18 00:00:00 GMT + 02:00 2012
  • date2:Tue Dec 18 00:00:00 GMT + 02:00 2012

date1.before(date2)在这种情况下,该方法总是返回false,这对我来说没有意义(换句话说,不适用于我的情况).我想检查一个日期(日/月/年)是否等于今天的日期(日/月/年)?

xle*_*ier 77

因为date1.equals(date2),date1.before(date2)返回false 是正常的.一如既往date1.after(date2).

两个日期都是一样的,所以一个不在另一个之前.

来自javadoc:

当且仅当此Date对象表示的时刻严格早于when 表示的时刻时才返回true ; 否则是假的.

尝试类似的东西:

if(date1.before(date2) || date1.equals(date2)) ...
Run Code Online (Sandbox Code Playgroud)

下面提供的答案建议测试反向,他们是对的:

if(!date1.after(date2)) ...
Run Code Online (Sandbox Code Playgroud)

两个测试都是等价的.

  • 我认为@taswyn和bowmore的解决方案更好. (2认同)

bow*_*ore 49

你可以简单地测试逆:

!date1.after(date2)
Run Code Online (Sandbox Code Playgroud)

您始终可以通过这种方式将严格的订单检查转换为非严格的检查.从数学上来说:

a > b ? ¬ (a ? b)
Run Code Online (Sandbox Code Playgroud)


tas*_*wyn 8

如果日期相同,那么显然一个不是在另一个之前:false is the correct return for date1.before(date2) where date1 == date2.

如果你需要包括相等,为什么不做一个否定.after()(显然如果日期1不是在日期2之后,那么它是相等的或之前),但我会确保这实际上是你想要完成的事情的正确逻辑.

如果相等是需要以不同方式处理的特殊情况,那么请对其进行单独测试.equals().


Raf*_*ira 6

你可以使用像bowmore提出的逆向: !date1.after(date2)

或者,如果您正在寻找范围,可以包括端点,在这种情况下您可以 use return !d.before(min) && !d.after(max)


zyg*_*tus 6

您也可以使用这个:

boolean check = dateOne.before(dateTwo) || DateUtils.isSameDay(dateOne, dateTwo);
Run Code Online (Sandbox Code Playgroud)

DateUtils 来自org.apache.commons.lang.time