2011-10-16 30 views
11

thể trùng lặp:
How to compare two Dates without the time portion?Hãy so sánh ngày mà không cần thời gian

Làm thế nào để so sánh ngày mà không cần thời gian trong java?

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

mã này so sánh ngày giờ!

+2

này một lần nữa lặp lại của [bài cũ] [1] [1]: http://stackoverflow.com/questions/1439779/how-to-compare-two-dates-without-the -time-part – Saurabh

+0

@saury: cảm ơn vì liên kết! Bằng cách nào đó tôi biết rằng Joda Thời gian sẽ có điều này xử lý một cách trơn tru. –

+0

Đây là một chủ đề thú vị vì tôi có yêu cầu tương tự, nhưng phải làm khối lượng lớn ngày so sánh và không sử dụng thư viện của bên thứ ba nếu có thể. Dưới đây là các tiêu chuẩn cơ bản so sánh hai ngày giống nhau bằng cách sử dụng các phương pháp khác nhau: * So sánh sử dụng getYear không dùng nữa, getMonth và getDate: time = 125ms cho 500000 so sánh * So sánh sử dụng SimpleDateFormat và Integer.parseInt: time = 719ms for 500000 so sánh +475 % * So sánh sử dụng các phương thức Calendar.get(): time = 2297ms cho 500000 so sánh + 1738% * So sánh bằng cách đặt thời gian thành nửa đêm: time = 2516ms cho 500000 so sánh + 1913% –

Trả lời

34

Hãy thử so sánh số ngày thay đổi để 0:00:00 thời gian của mình (như chức năng này làm):

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

Bạn có thể viết phương thức Date withoutTime(Date) trả về bản sao ngày mà tất cả các trường thời gian (giờ, phút, giây, milli) được đặt thành 0. Sau đó, bạn có thể so sánh chúng.

Hoặc bạn có thể chuyển sang Thời gian Joda nếu có thể. Thư viện đó đã có loại dữ liệu DateMidnight, đó là những gì bạn đang tìm kiếm.

1

Viết phương pháp riêng của bạn mà không mất thời gian vào tài khoản:

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

Lưu ý rằng phương pháp getYear(), getMonth()getDate() đã bị phản đối. Bạn nên đi qua lớp Calendar và thực hiện cùng một phương pháp.

Các vấn đề liên quan