2010-10-16 44 views
5

Tôi tự hỏi làm thế nào để so sánh hai đối tượng DateTime trong .NET bằng cách sử dụng phương pháp DateTime Compare, CompareTo hoặc Equals mà không so sánh bọ ve.Làm thế nào để so sánh hai datetimes

Tôi chỉ cần mức dung sai của mili giây hoặc giây.

Làm cách nào để thực hiện điều này?

Trả lời

9

Bạn có thể trừ một số DateTime từ người khác để tạo ra một TimeSpan đại diện cho sự khác biệt về thời gian giữa chúng. Sau đó, bạn có thể kiểm tra nếu giá trị tuyệt đối tuyệt đối của khoảng này nằm trong dung sai mong muốn của bạn.

bool dtsWithinASecOfEachOther = d1.Subtract(d2).Duration() <= TimeSpan.FromSeconds(1); 

Các cuộc gọi đến TimeSpan.Duration() thể được bỏ qua nếu bạn biết rằng DateTime đầu tiên không thể đại diện cho một điểm trước đó trong thời gian hơn so với khác, ví dụ: d1 >= d2.

Để trả lời câu hỏi của bạn về các phương pháp so sánh, DateTime.Compare(d1, d2) tạo ra kết quả tương tự như d1.CompareTo(d2):

  • 0 nếu họ đại diện cho cùng một thời điểm (d1.Equals(d2), d1 == d2). Tuy nhiên, lưu ý rằng độ phân giải của DateTime là 1 tick = 100 nano giây = 10^-7 giây.
  • Một giá trị lớn hơn 0 nếu d1 là thứ tự thời gian sau khi d2 (d1 > d2)
  • Một giá trị nhỏ hơn 0 nếu d1 là thứ tự thời gian trước khi d2 (d1 < d2)
2

Sử dụng TimeSpan để kiểm tra khoan dung của bạn - TimeSpan là gõ trở về từ DateTimes trừ:

TimeSpan tolerance = new TimeSpan(0,0,1); 
return (date1 - date2) <= tolerance; 

Compare, CompareToEquals sẽ không mất một khoan dung đối với việc so sánh, vì vậy không thể sử dụng theo cách này.

tùy chọn khác là để tạo mới DateTime s từ những cái hiện có, loại bỏ chính xác không mong muốn và so sánh những cái mới:

DateTime noSeconds1 = new DateTime(d1.Year, d1.Month, d1.Day, d1.Hour, d1.Minute, 0); 
DateTime noSeconds2 = new DateTime(d2.Year, d2.Month, d2.Day, d2.Hour, d2.Minute, 0); 

noSeconds1.Equals(noSeconds2); 
DateTime.Compare(noSeconds1, noSeconds2); 
noSeconds1.CompareTo(noSeconds2); 
2

Thông thường, nếu bạn muốn có một đơn so sánh để cho bạn biết thời điểm nào ít hơn, bằng hoặc lớn hơn, sử dụng DateTime.Compare(). Nếu không, bạn có thể sử dụng DateTime.Equals(). Để thêm giá trị dung sai, hãy trừ một giá trị khác và so sánh kết quả với giá trị nhỏ hơn một số TimeSpan:

// For seconds 
if (laterDate-earlierDate<=TimeSpan.FromSeconds(1)) 
    ... 

// For milliseconds 
if (laterDate-earlierDate<=TimeSpan.FromMilliseconds(1)) 
    ... 
2

Bạn có thể chuyển đổi cả DateTimes thành chuỗi và so sánh chuỗi kết quả. Đảm bảo bạn xác định định dạng chuỗi để tránh các sự cố trên các máy có cài đặt vùng khác với cài đặt của bạn.

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