如果日期相等,则显然一个不在另一个之前:false is the correct return for date1.before(date2) where date1 == date2。 如果你需要 * 包含 * 相等,为什么不在.after()上做一个否定(显然,如果日期1不在日期2之后,那么它是 * 等于或之前 *),但我会确保这实际上是正确的逻辑,你试图完成。 如果相等是一种特殊情况,需要以不同的方式处理,那么对.equals()进行单独的测试。
代码的真实的问题可能是没有考虑米利斯和before函数 两个对象java.util.Date,带有toString结果:Sun Aug 28 00:00:00 CEST 2016在调用getTime时可能有不同的值。比如说
Date d1;
Date d2;
d1.toString(); // = Sun Aug 28 00:00:00 CEST 2016
d2.toString(); // = Sun Aug 28 00:00:00 CEST 2016
d1.getTime(); // = 1472335200605
d2.getTime(); // = 1472335200000
if (dateTime1.isAfter(dateTime2)) {
System.out.println("dateTime1 is after dateTime2");
} else {
System.out.println("dateTime1 is before or equal to dateTime2");
}
型 输出和以前一样。 根据需求,您很容易发现自己更喜欢Instant类而不是OffsetDateTime。if的条件也是一样的。 无论是使用老式的Date还是现代类中的一个 before 都意味着 * 严格before*。因此,要获得 before或equal,我们需要使用上面的变体之一。
9条答案
按热度按时间4c8rllxm1#
作为
date1.equals(date2)
,date1.before(date2)
返回false
是正常的。就像date1.after(date2)
一样。两个日期是相同的,所以一个不在另一个之前。
关于javadoc:
true当且仅当此Date对象表示的时刻严格早于when表示的时刻;否则为false。
尝试以下操作:
字符串
下面提供的答案建议测试相反的情况,他们是正确的:
型
两种测试是等效的。
zsohkypk2#
您可以简单地测试逆:
字符串
您始终可以通过这种方式将严格顺序检查转换为非严格检查。因为数学上:
型
nnt7mjpx3#
如果日期相等,则显然一个不在另一个之前:
false is the correct return for date1.before(date2) where date1 == date2
。如果你需要 * 包含 * 相等,为什么不在
.after()
上做一个否定(显然,如果日期1不在日期2之后,那么它是 * 等于或之前 *),但我会确保这实际上是正确的逻辑,你试图完成。如果相等是一种特殊情况,需要以不同的方式处理,那么对
.equals()
进行单独的测试。oxf4rvwz4#
你可以使用鲍莫尔提出的相反方法:第一个月
或者,如果要查找范围,between可以包括端点,在这种情况下,可以使用
use return !d.before(min) && !d.after(max)
ilmyapht5#
你也可以使用这个:
字符串
DateUtils来自org.apache.commons.lang.time包
sqserrrh6#
代码的真实的问题可能是没有考虑米利斯和before函数
两个对象java.util.Date,带有toString结果:Sun Aug 28 00:00:00 CEST 2016在调用getTime时可能有不同的值。比如说
字符串
当然,这些日期并不相等。
来自javadoc:
“返回:true当且仅当此Date对象表示的时刻严格早于when表示的时刻;否则为假”。
knpiaxh17#
这是一个非常正常的行为,因为
dateBefore
会检查一个日期是否在另一个日期之前。如果日期相等,这显然是假的。ukxgm1gy8#
Assertj的isBeforeOrEqualTo是一个测试选项。
0mkxixxg9#
2012年的答案是正确的,而且当时的答案一般都很好。现在,我们肯定更喜欢使用java.time,现代Java日期和时间API,而不是问题中隐含的
Date
类。Date
设计很差,现在早就过时了。获得“之前或相等”比较的两种推荐方法是:
1.自然和罗嗦一个:
字符串
输出为:
dateTime1早于或等于dateTime2
顺便说一下,
OffsetDateTime.isEqual()
跨UTC偏移量比较时间点,并将返回true,这两个对象表示相同的时间点。isBefore()
也可以在不同的UTC偏移量下工作。1.简单的一个,我们反转条件:
型
输出和以前一样。
根据需求,您很容易发现自己更喜欢
Instant
类而不是OffsetDateTime
。if
的条件也是一样的。无论是使用老式的
Date
还是现代类中的一个 before 都意味着 * 严格before*。因此,要获得 before或equal,我们需要使用上面的变体之一。