2011-10-09 23 views
22

Cách kiểm tra xem 20 phút đã trôi qua từ ngày hiện tại chưa?So sánh ngày - Cách kiểm tra xem đã qua 20 phút chưa?

Ví dụ:

var start = DateTime.Now; 
var oldDate = "08/10/2011 23:50:31"; 

    if(start ??) { 
    //20 minutes were passed from start 
    } 

cách tốt nhất để làm điều này là những gì? Cảm ơn :)

+0

Bạn có thể muốn sử dụng 'DateTime.UtcNow' thay vì' DateTime.Now' để tránh các vấn đề với thay đổi thời gian tiết kiệm ánh sáng ban ngày khi đồng hồ có thể nhảy lùi hoặc tiến. –

+2

@Hightechrider: Sử dụng 'UtcNow' chỉ hữu ích nếu dấu thời gian so sánh là UTC! – Gabe

+1

@Gabe, rõ ràng là có, nhưng chuyển đổi thời gian bắt đầu thành UTC và so sánh nó sẽ tốt hơn so với 'DateTime.Now' bởi vì nếu không bạn có thể nhận được các tình huống trong đó một giờ dường như đã trôi qua khi không có! –

Trả lời

52
  1. Bạn nên chuyển đổi thời gian bắt đầu của bạn để một thời gian UTC, nói 'start'.
  2. Bây giờ bạn có thể so sánh thời gian bắt đầu của mình vào thời gian tính theo giờ UTC hiện tại sử dụng:

    start.AddMinutes(20) > DateTime.UtcNow

Cách tiếp cận này có nghĩa là bạn sẽ nhận được câu trả lời đúng xung quanh ánh sáng ban ngày thay đổi thời gian tiết kiệm.

Bằng cách thêm thời gian vào thời gian bắt đầu thay vì trừ và so sánh tổng thời gian trên một TimeSpan bạn có cú pháp dễ đọc hơn VÀ bạn có thể xử lý nhiều trường hợp khác biệt ngày, ví dụ: 1 tháng kể từ khi bắt đầu, 2 tuần kể từ khi bắt đầu, ...

+2

+1 để giảng dạy một cái gì đó hợp lý nhưng không phải là điều hiển nhiên đối với tôi. Và tôi cũng thích gợi ý về cú pháp dễ đọc hơn. –

+0

trông giống như cách tốt nhất, tôi sẽ thử tính năng này. –

+0

Điều này có thay đổi đối tượng thực tế không. ví dụ. nếu bạn lưu trữ một nơi nào đó trong bộ nhớ, nó sẽ vĩnh viễn được tăng thêm 20 phút? Trong trường hợp đó, nó sẽ có ý nghĩa hơn để xóa 20 phút khỏi DateTime.UtcNow vì đó là một hàm tạo –

5

Phân tích cú pháp oldDate thành một đối tượng DateTime (DateTime.Parse).

Trừ ngày được phân tích cú pháp khỏi start. Điều này sẽ trả về một số TimeSpan.

Kiểm tra TotalMinutes.

+2

+1 câu trả lời này tốt hơn câu trả lời của tôi. Tôi quên về TotalMinutes ... câu trả lời này ngăn cản một TimeSpan thứ hai không cần thiết. –

+2

Cá nhân tôi thích 'start.AddMinutes (20)> now' vì nó nói" hơn 20 phút đã trôi qua kể từ khi bắt đầu ". Ngoài ra, bạn có thể sử dụng nó để kiểm tra các khoảng thời gian được đo bằng tuần, tháng, năm mà bạn không thể dễ dàng thực hiện với một TimeSpan. –

4
var start = DateTime.Now; 
var oldDate = DateTime.Parse("08/10/2011 23:50:31"); 

    if(start.Subtract(oldDate) >= TimeSpan.FromMinutes(20)) 
    { 
    //20 minutes were passed from start 
    } 
0
var end = DateTime.Parse(oldDate); 
if (start.Hour == end.Hour && start.AddMinutes(20).Minute >= end.Minute) 
+0

Điều này không hoạt động nếu giờ trôi qua. để bắt đầu = '23: 20' end = '24: 20' là đúng. –

4
var start = DateTime.Now; 
var oldDate = DateTime.Parse("08/10/2011 23:50:31"); 

if ((start - oldDate).TotalMinutes >= 20) 
{ 
    //20 minutes were passed from start 
} 
+0

Điều này không hoạt động nếu giờ trôi qua. để bắt đầu = '23: 20' end = '24: 20' là đúng. –

+0

¿Tại sao bạn gửi 24:20 làm thời gian? Trong trường hợp này, bạn nên sử dụng một đối tượng TimeSpan, không phải là một đối tượng DateTime, DateTime được sử dụng để biểu diễn thời gian hợp lệ, không phải là "24:20" –

1

tôi đã có thể thực hiện điều này bằng cách sử dụng một thư viện JodaTime trong dự án của tôi. Tôi đi ra với mã này.

String datetime1 = "2012/08/24 05:22:34"; 
String datetime2 = "2012/08/24 05:23:28"; 

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss"); 
DateTime time1 = format.parseDateTime(datetime1); 
DateTime time2 = format.parseDateTime(datetime2); 
Minutes Interval = Minutes.minutesBetween(time1, time2); 
Minutes minInterval = Minutes.minutes(20); 

if(Interval.isGreaterThan(minInterval)){ 
    return true; 
} 
else{ 
    return false; 
} 

Điều này sẽ kiểm tra xem Khoảng thời gian giữa datetime1 và datetime2 có lớn hơn 20 phút hay không. Thay đổi thuộc tính thành Giây. Nó sẽ dễ dàng hơn cho bạn biết. Điều này sẽ trả về false.

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