calendar.getTime().equals(cal1) return false 虽然两个日历有相同的时间

calendar.getTime().equals(cal1) return false though both calendars has same time

    Calendar calendar = Calendar.getInstance();
    Calendar cal1 = Calendar.getInstance();

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

正在打印 calendar.getTime()cal1.getTime() returns

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

以下代码按预期打印 Hi! 它应该 return 对等号检查为真,但事实并非如此。

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

那为什么等号检查 return 为 false?

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

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

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

你的第二个 if 里面有 or 所以它 returns true

Mon Aug 10 16:00:10 IST 2020Mon Aug 10 16:00:11 IST 2020 以秒为单位不同。

另外,建议大家不要使用过时的error-pronejava.utildate-timeAPI。使用 modern date time 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