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