2011-10-16 27 views
11

可能重複:
How to compare two Dates without the time portion?比較日期不受時間

如何比較最新狀態,而java開發時間?

Date currentDate = new Date();// get current date   
Date eventDate = tempAppointments.get(i).mStartDate; 
int dateMargin = currentDate.compareTo(eventDate); 

此代碼將時間和日期進行比較!

+2

這再次重複[老帖] [1] [1]的:http://stackoverflow.com/questions/1439779/how-to-compare-two-dates-without-the時間部分 – Saurabh

+0

@saury:感謝您的鏈接!不知何故,我知道Joda Time會以平穩的方式處理這件事。 –

+0

這是一個有趣的話題,因爲我有類似的要求,但必須做大量的日期比較,並且如果可能的話不需要使用第三方庫。以下是使用各種方法比較相同兩個日期的基本基準: *使用棄用的getYear,getMonth和getDate進行比較:500000時間= 125ms比較 *使用SimpleDateFormat和Integer.parseInt進行比較:time = 719ms for 500000比較+475 % *使用Calendar.get()方法進行比較:time = 2297ms for 500000比較+ 1738% *將時間設置爲午夜進行比較:時間= 2516ms for 500000比較+ 1913% –

回答

34

嘗試比較日期更改爲00:00:00的時間(這個功能做):

public static Date getZeroTimeDate(Date fecha) { 
    Date res = fecha; 
    Calendar calendar = Calendar.getInstance(); 

    calendar.setTime(fecha); 
    calendar.set(Calendar.HOUR_OF_DAY, 0); 
    calendar.set(Calendar.MINUTE, 0); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.MILLISECOND, 0); 

    res = calendar.getTime(); 

    return res; 
} 

Date currentDate = new Date();// get current date   
Date eventDate = tempAppointments.get(i).mStartDate; 
int dateMargin = getZeroTimeDate(currentDate).compareTo(getZeroTimeDate(eventDate)); 
3

您可以編寫一個方法Date withoutTime(Date),該方法返回所有時間字段(小時,分鐘,秒,毫秒)設置爲零的日期的副本。然後你可以比較這些。

或者如果可能,您可以切換到Joda時間。該庫已經有數據類型DateMidnight,這正是您要查找的內容。

1

寫你自己的方法,它不花時間到賬號:

public static int compareDate(Date date1, Date date2) { 
    if (date1.getYear() == date2.getYear() && 
     date1.getMonth() == date2.getMonth() && 
     date1.getDate() == date2.getDate()) { 
     return 0 ; 
    } 
    else if (date1.getYear() < date1.getYear() || 
      (date1.getYear() == date2.getYear() && 
       date1.getMonth() < date2.getMonth()) || 
      (date1.getYear() == date2.getYear() && 
       date1.getMonth() == date2.getMonth() && 
       date1.getDate() < date2.getDate()) { 
     return -1 ; 
    } 
    else { 
    return 1 ; 
    } 
} 

注意方法getYear()getMonth()getDate()已棄用。您應該通過Calendar類並執行相同的方法。