我试图以两种不同的格式比较日期:
Tue Jul 01 00:12:14 EST 2014
使用以下函数创建:
private Date getDate (int day, int month, int year){
Calendar calendar = Calendar.getInstance();
calendar.setLenient(false);
calendar.set(year, month-1, day);
Date date = calendar.getTime();
return date;
}
和
2014-07-01
在比较这两个日期后,我希望输出显示它们是相同的。但是我相信,由于第1个日期timestamp
,它们并没有被确定为平等。
我的假设是否正确?
如果是这样,有没有办法可以将第一个日期转换为第二个日期?正在从SQL
数据库中检索第二个日期,其中变量为DATE
。
感谢您的帮助。
答案 0 :(得分:4)
听起来你正在比较java.util.Date
(即时)和java.sql.Date
(时间是午夜时刻)。
算术舍入必须处理本地时区,使其比您最初想象的更复杂。
比较两者的最简单方法是使用数据格式化器并比较输出:
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
if (f.format(date1).equals(f.format(date2))) {
// the two dates are on the same "day"
}
答案 1 :(得分:1)
该文档解释了java.sql.Date的时间部分设置为零(UTC),即午夜。
因此,当与具有非零时间的java.util.Date进行比较时,两者将不相等。
在Java 8中使用新的java.time包的Joda-Time变得更加容易。两者都提供了忽略时间的LocalDate类。
LocalDate x = new LocalDate( 2014, 5, 6 );
LocalDate y = new LocalDate( 2014, 5, 6 );
boolean same = x.equals( y );
要将java.sql.Date转换为Joda-Time LocalDate,请将其传递给New LocalDate的构造函数。您可能还需要传递DateTimeZone.UTC
以确保它不会被JVM的默认时区解释。
答案 2 :(得分:0)
我的假设是否正确?
是的,你的假设是正确的。如果两个日期实例的getTime()结果相同,则两个日期实例是正确的
来自 Date.java 的
public boolean equals(Object obj) {
return obj instanceof Date && getTime() == ((Date) obj).getTime();
}
转换只是假设您需要将小时,分钟和秒设置为0:
calendar.set(Calendar.HOUR_OF_DAY,0);
calendar.set(Calendar.MINUTE,0);
calendar.set(Calendar.SECOND,0);
答案 3 :(得分:0)
假设两个日期都在同一时区,并假设此处的日期相等标准是一年中的某一天,我相信您只需将日期作为字符串进行比较。
为此,您可以使用SimpleDateFormat确保两者的格式相同。
答案 4 :(得分:0)
我建议您将它们转换为一种特定格式,并使用比较器进行比较。
答案 5 :(得分:0)
如果需要检查两个日期是否相等,最好的方法是使用compareTo
方法。
if(yesterday.compareTo(today) == 0) {
System.out.println("Given dates are same");
} else {
System.out.println("Given dates are different ");
}
阅读更多:https://www.java67.com/2016/09/how-to-compare-two-dates-in-java.html#ixzz6uH5r1xE2