我正在测试使用常量创建的日期的相等性,并且由于某种原因,测试都失败了。
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();
}
如果我用相同的年,月,日,小时等创建它,那么我希望它是平等的。除了它不一致之外。我在两个不同的类中使用此函数,并且对象不相等 - 除了有时。
问题是什么?它给我的时代偶尔落后于另一个时代,我不完全确定原因。
答案 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();
}