2012-02-05 115 views
2

我有一个Date实例的问题。我做了以下内容:Java日期时间问题

Date startDate = new Date(); //this is from database value 
Date todayDate = new Date(); //this is created locally 

现在,当我试图对它们进行比较,唯一的问题是,Date实例将有时间,所以当我检查,如果他们是平等的,它可能不会给同样的事情,我期望,但更少或更多。我测试了以下内容:

System.out.println(rsv.startDate); 
    System.out.println("Today date:"+todayDate); 
    if(rsv.startDate.equals(todayDate)){ 
     System.out.println("Equal!"); 
    }else if(rsv.startDate.after(todayDate)){ 
     System.out.println("After!!"); 
    }else{ 
     System.out.println("Before!!!!"); 
    } 

尽管两者都是第5位,但它显示的是Before的输出,而不是相等的。我该如何补救?我知道SimpleDateFormat,但会将日期更改为字符串。

感谢,

+2

你是想弄清楚如果两个日期是在同一天? (http://stackoverflow.com/questions/2517709/java-comparing-two-dates-to-see-if-they-are-in-the-same-day)。那么SimpleDateFormat有什么问题呢? – 2012-02-05 10:50:42

回答

2

对于日期操作,您可以使用Joda实用程序。下面的代码片段显示了比较两个日期:

DateTime one = new DateTime(original-Date-1); 
DateTime two = new DateTime(original-Date-2); 

LocalDate oneDate = one.toLocalDate(); 
LocalDate twoDate = two.toLocalDate(); 

return oneDate.compareTo(twoDate); 

你可以看到:http://joda-time.sourceforge.net/index.html

+0

它工作:)谢谢 – 2012-02-05 11:02:08

2

可以去掉从目前的Date对象的时间:

Date date = new Date(); 

    Calendar dCal = Calendar.getInstance(); 
    dCal.setTime(date); 
    dCal.set(Calendar.HOUR_OF_DAY, 0); 
    dCal.set(Calendar.MINUTE, 0); 
    dCal.set(Calendar.SECOND, 0); 
    dCal.set(Calendar.MILLISECOND, 0); 

    date = dCal.getTime(); 

,然后进行比较。

另外,如果你在你的项目需要更多的日期/时间的处理能力,可以使用乔达日期时间库:http://joda-time.sourceforge.net

MidnightDate类是适合这个特定用例:http://joda-time.sourceforge.net/api-release/org/joda/time/DateMidnight.html

+0

我已经在程序的其他部分使用了乔达时间,但并不打算在本模块中使用它:)感谢您的推荐。将尝试上面的代码:) – 2012-02-05 10:46:27

0

Date既包含了日期和时间。如果时间也相同,Equals()将只返回true。为了进行比较,您需要确保两个对象的时间部分都相同(例如全部设置为零)。