静态创建的日期不相等?

时间:2014-04-16 12:21:47

标签: 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();
}

如果我用相同的年,月,日,小时等创建它,那么我希望它是平等的。除了它不一致之外。我在两个不同的类中使用此函数,并且对象不相等 - 除了有时

问题是什么?它给我的时代偶尔落后于另一个时代,我不完全确定原因。

2 个答案:

答案 0 :(得分:2)

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

停止使用java日期时间api的憎恶并改为使用jodatime

DateTime dateTime = new DateTime().secOfDay().roundFloorCopy();
dateTime.equals(myOtherDateTimeCreatedSameway);

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

答案 1 :(得分:1)

旧的日历API一般来说无疑是可怕的,但我展示了一种可能的解决方案,它可以抑制构造函数中生成的毫秒部分。只要您不更改时区,这将有效。因此,有时候低估了Calendar-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();
}