2011-10-09 11 views
22

Jak sprawdzić, czy minęło 20 minut od bieżącej daty?Porównywanie dat - Jak sprawdzić, czy minęło 20 minut?

Na przykład:

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

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

co jest najlepszym sposobem, aby to zrobić? Pozdrowienia :)

+0

Możesz chcieć użyć 'DateTime.UtcNow' zamiast' DateTime.Now', aby uniknąć problemów ze zmianami czasu letniego, kiedy zegar może przeskoczyć do tyłu lub do przodu. –

+2

@Hightechrider: Użycie 'UtcNow' jest przydatne tylko wtedy, gdy znacznik czasu porównania znajduje się w UTC! – Gabe

+1

@Gabe, oczywiście tak, ale konwertowanie czasu startowego na UTC i porównywanie go będzie lepsze niż porównanie z 'DateTime.Now', ponieważ w przeciwnym razie można uzyskać sytuacje, w których upłynęła godzina, gdy nie minęła! –

Odpowiedz

52
  1. Należy zamienić czasu rozpoczęcia do czasu UTC, powiedzieć 'start'.
  2. Teraz można porównać swój czas rozpoczęcia bieżącego czasu UTC za pomocą:

    start.AddMinutes(20) > DateTime.UtcNow

Takie podejście oznacza, że ​​będzie można uzyskać poprawną odpowiedź wokół dziennych zmian czasowych oszczędności.

Dodanie czasu do godziny rozpoczęcia zamiast odejmowania i porównywania całkowitego czasu na TimeSpanie zapewnia bardziej czytelną składnię ORAZ można obsłużyć więcej przypadków różnicy dat, np. 1 miesiąc od początku, 2 tygodni od początku ...

+2

+1 za nauczanie czegoś, co jest logiczne, ale nie było dla mnie oczywiste. I podoba mi się również podpowiedź na temat bardziej czytelnej składni. –

+0

wygląda jak najlepiej, spróbuję tego. –

+0

Czy to zmienia rzeczywisty obiekt. na przykład jeśli przechowujesz to gdzieś w pamięci, czy zostanie trwale zwiększone o 20 minut? W takim przypadku rozsądniej byłoby usunąć 20 minut z DateTime.UtcNow ponieważ jest to konstruktor –

5

Analizowanie obiektu oldDate na obiekt DateTime().

Odejmij przeanalizowaną datę od start. To zwróci wartość TimeSpan.

Sprawdź TotalMinutes.

+2

+1 ta odpowiedź jest lepsza niż moja. Zapomniałem o TotalMinutes ... ta odpowiedź zapobiega niepotrzebnemu drugiemu TimeSpan. –

+2

Osobiście preferuję 'start.AddMinutes (20)> teraz' ponieważ mówi" ponad 20 minut od rozpoczęcia ". Możesz również użyć go do przetestowania odstępów mierzonych w tygodniach, miesiącach i latach, których nie można łatwo wykonać za pomocą 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

To nie działa, jeśli godzina została zaliczona. dla początku = '23: 20' end =' 24: 20' to prawda. –

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

To nie działa, jeśli godzina minęła. dla początku = '23: 20' end =' 24: 20' to prawda. –

+0

¿Dlaczego wyślesz 24:20 jako czas? W takim przypadku powinieneś użyć obiektu TimeSpan, a nie DateTime, obiekty DateTime mają być używane do prawidłowych reprezentacji czasu, a nie "24:20" –

1

udało mi się tego dokonać przy użyciu JodaTime biblioteki w moim projekcie. Wyszedłem z tym kodem.

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

Spowoduje to sprawdzenie, czy przedział czasu między datetime1 i datetime2 to GreaterThan 20 Minutes. Zmień właściwość na Sekundy. Będzie ci łatwiej poznać. To zwróci false.

Powiązane problemy