我正在尝试将两个日期与当前日期进行比较。当我试图知道日期是否与当前日期相同时,它似乎无法工作。这是我在代码中所做的事情:
//BeginDate is set earlier
Date myDate= new SimpleDateFormat("dd/MM/yyyy").parse(BeginDate);
Date now = new Date();
System.out.println("Now : " + now);
System.out.println("myDate : " + myDate);
System.out.println("equals : " + myDate.equals(now));
System.out.println(myDate.compareTo(now));
我在控制台中得到了这个:
Now : Thu Dec 29 00:28:45 CET 2011
myDate : Thu Dec 29 00:00:00 CET 2011
equals : false
-1
第一次比较应该返回true而第二次“0”是否正确?或者我错过了什么?
答案 0 :(得分:5)
将日期与equals()或compareTo()进行比较,比较时间(小时,分钟,秒,毫秒)以及日期。您的测试失败,因为myDate
今天是午夜,而now
比此晚一点。
答案 1 :(得分:1)
您的比较失败,因为您需要立即格式化,以便两个日期具有相同的格式,因此可以进行比较。
或者,如果您愿意,可以将日期转换为字符串并执行比较:
String beginDate = "28/12/2011";
Calendar now = Calendar.getInstance();
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String nowStr = df.format(new Date());
System.out.println("equals : " + beginDate.equals(nowStr));
答案 2 :(得分:0)
您是否在创建日期时指定了毫秒数?如果你是,不要。因此,在更早创建日期时,仅指定日,小时等,而不是秒/毫秒。
然后,分别更改SimpleDateFormat。 “应该”有效。
答案 3 :(得分:0)
日期对象只是一个数字,表示自1970年1月1日00:00:00 GMT以来的毫秒数。它没有任何称为日,月,月,年等的属性。这是因为日期,月份,年份根据日历和时区的类型而有所不同。这些属性属于 Calendar 实例。
因此,如果您有2个日期对象,并且想要比较月,月和年的日期,则应创建相应的日历实例并单独进行比较。< / p>
// Parse begin date
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date beginDate = dateFormat.parse(beginDateAsString);
// Create calendar instances
Calendar beginDateCalendar = Calendar.getInstance();
beginDateCalendar.setTime(beginDate);
Calendar todayCalendar = Calendar.getInstance();
// Check Equals
boolean dayEquals = todayCalendar.get(Calendar.DAY_OF_MONTH) == beginDateCalendar
.get(Calendar.DAY_OF_MONTH);
boolean monthEquals = todayCalendar.get(Calendar.MONTH) == beginDateCalendar
.get(Calendar.MONTH);
boolean yearEquals = todayCalendar.get(Calendar.YEAR) == beginDateCalendar
.get(Calendar.YEAR);
// Print Equals
System.out.println(dayEquals && monthEquals && yearEquals);
以上代码对于当前问题来说很麻烦,但解释了如何在JAVA中完成日期操作。
如果你只是想解决你提到的平等问题,那么下面的代码就足够了:
String todayAsString = (new SimpleDateFormat("dd/MM/yyyy")).format(new Date());
System.out.println(beginDateAsString.equals(todayAsString));
答案 4 :(得分:0)
如果你只是要处理1900年到2100年之间的日期,那么有一个简单的计算方法可以给你自1900年以来的天数:
public static int daysSince1900(Date date) {
Calendar c = new GregorianCalendar();
c.setTime(date);
int year = c.get(Calendar.YEAR) - 1900;
int month = c.get(Calendar.MONTH) + 1;
int days = c.get(Calendar.DAY_OF_MONTH);
if (month < 3) {
month += 12;
year--;
}
int yearDays = (int) (year * 365.25);
int monthDays = (int) ((month + 1) * 30.61);
return (yearDays + monthDays + days - 63);
}
因此,可以通过检查两个日期中1900年以来的天数是否相等来实现日期(仅)比较。
注意:上面的方法应该添加代码以检查日期是否超出有效范围(1/1/1900 - 31/12/2099)并抛出IllegalArgumentException。
不要问我这个计算的来源,因为我们从90年代初就开始使用它。