calendar.getTime().equals(cal1)返回false,尽管两个日历的时间相同


Calendar calendar = Calendar.getInstance();
Calendar cal1 = Calendar.getInstance();
if (calendar.getTime().equals(cal1.getTime())) {
System.out.println("Hi!");
}

打印calendar.getTime()cal1.getTime()返回

2020年8月10日星期一16:00:10 IST
2020年8月下周一16:00:11

下面的代码按预期打印Hi!,它应该返回true进行相等检查,但它没有。

if (!calendar.getTime().after(cal1.getTime()) || !calendar.getTime().before(cal1.getTime())) {
System.out.println("Hi!");
}

那么,为什么它对equals检查返回false呢?

Mon Aug 10 16:00:10 IST 2020Mon Aug 10 16:00:11 IST 2020的秒数不同

此外,我建议您不要使用过时且错误的java.util日期时间API。使用现代日期时间API,如下所示:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String dateTimeStr1 = "Mon Aug 10 16:00:10 IST 2020";
String dateTimeStr2 = "Mon Aug 10 16:00:11 IST 2020";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z u", Locale.ENGLISH);
LocalDateTime date1 = LocalDateTime.parse(dateTimeStr1, formatter);
LocalDateTime date2 = LocalDateTime.parse(dateTimeStr2, formatter);
System.out.println(date1.equals(date2));
}
}

输出:

false

如何通过排除秒进行比较:

import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String dateTimeStr1 = "Mon Aug 10 16:00:10 IST 2020";
String dateTimeStr2 = "Mon Aug 10 16:00:11 IST 2020";
// Define the formatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z u", Locale.ENGLISH);
// Parse the date-time strings into LocalDateTime
LocalDateTime date1 = LocalDateTime.parse(dateTimeStr1, formatter);
LocalDateTime date2 = LocalDateTime.parse(dateTimeStr2, formatter);
// Create LocalDateTime instances from the parsed ones by excluding seconds
LocalDateTime date1WithoutSec = LocalDateTime.of(date1.toLocalDate(),
LocalTime.of(date1.getHour(), date1.getMinute()));
LocalDateTime date2WithoutSec = LocalDateTime.of(date2.toLocalDate(),
LocalTime.of(date2.getHour(), date2.getMinute()));
System.out.println(date1WithoutSec.equals(date2WithoutSec));
}
}

输出:

true

它们根本不相等,您可以看到。

8月10日星期一16:00:10IST 2020

8月10日星期一16:00:11IST 2020。

第二个if中有or,所以它返回true

最新更新