Java 静态创建的日期不相等?

Java 静态创建的日期不相等?,java,date,Java,Date,我正在测试使用常量创建的日期是否相等,由于某种原因,测试都失败了 public static Date date(int year, int month, int date, int hour, int minute) { Calendar working = GregorianCalendar.getInstance(); working.set(year, month, date, hour, minute, 1); return working.getTime();

我正在测试使用常量创建的日期是否相等,由于某种原因,测试都失败了

public static Date date(int year, int month, int date, int hour, int minute) {
    Calendar working = GregorianCalendar.getInstance();
    working.set(year, month, date, hour, minute, 1);
    return working.getTime();
}
如果我用相同的年、月、日、小时等来创建它,那么我希望它是相等的。但事实并非如此。我在两个不同的类中使用这个函数,对象并不相等——只是有时例外


有什么问题吗?它给我的历元有时落后于另一个历元1秒,我不完全确定原因。

getTime是毫秒精度,您只设置为秒精度。因此,当您使用
.equals()
方法比较日期时,它将返回false

停止使用令人厌恶的java日期时间api,改用它


或者,如果您只是担心日期,而不是时间,请使用LocalDate。

旧的日历API在总体上无疑是可怕的,但我展示了一种可能的解决方案,它会抑制构造函数中生成的毫秒部分。只要你不改变时区,这就行了。因此,有时日历API被低估,而JodaTime往往被高估

public static Date date(int year, int month, int date, int hour, int minute) {
    // current time in system timezone
    GregorianCalendar working = new GregorianCalendar();

    // assuming you rather want second set to zero
    working.set(year, month, date, hour, minute, 0); 

    // no millisecond part
    working.set(Calendar.MILLISECOND, 0);
    return working.getTime();
}

你是如何比较的?您能给出测试失败的代码吗?如何进行比较?如果日期在毫秒上不同,如果使用毫秒精度进行比较,则日期将不相等。为什么不创建自己的比较方法?你想要什么样的精度?我实际上只想要第二精度,但我不会在JodaTime工作时重新发明轮子。该死的Java,为什么你不容易使用。你已经解释了问题,但还没有给出解决方案。你能发布代码来解决这个问题吗?
public static Date date(int year, int month, int date, int hour, int minute) {
    // current time in system timezone
    GregorianCalendar working = new GregorianCalendar();

    // assuming you rather want second set to zero
    working.set(year, month, date, hour, minute, 0); 

    // no millisecond part
    working.set(Calendar.MILLISECOND, 0);
    return working.getTime();
}