2011-03-19 15 views
11

Son 24 saatte bir olup olmadığını kontrol etmek ve görmek istediğim bir DateTime nesnesine sahibim.C# DateTime son 24 saatte bir düşme gösteriyor

bu ama onun yanlış gibi bir şey yaptı:

myDateTime > DateTime.Now.AddHours(-24) && myDateTime < DateTime.Now 
hata yaptım

?

+1

... Tamam görünüyor ilk bakışta ... "bunun yanlış" AddDays (-1) çalıştı tanımlayın? –

cevap

23

Gönderdiğiniz kodda bir sorun yok, bu nedenle yanlış yaptığınız her şey kodda başka bir yerdedir.

Ben sadece kod iki küçük kusurları bakın, ama onlar sadece köşe durumları etkilemez:

Sen kodunda art arda DateTime.Now mülk alma kaçınmalıdır. Değeri değişir, bu yüzden değerler bir kullanımdan diğerine değiştiğinde bazı durumlarda tutarsız sonuçlar alabilirsiniz.

genellikle > ve <= veya >= ve < gibi kapsayıcı bir ve tek özel operatörü, eşleştirmek verecek bir zaman aralığı almak için. Böylelikle, 0 - 24 saat ve 24 - 28 saat gibi birbiri ardına aralıklarla bir boşluk veya çakışma olmadan kontrol edebilirsiniz.

DateTime now = DateTime.Now; 
if (myDateTime > now.AddHours(-24) && myDateTime <= now) 
+0

Konuştuğunuz optimizasyon tekniğini anlamıyorum, lütfen bazı kodlarla açıklayabilir misiniz? –

+1

@Gully Monsta: Yukarıda bir örnek ekledim. Ancak, bu herhangi bir optimizasyon değildir, sadece koddaki olası tutarsızlıkları önler. – Guffa

+0

Başka bir küçük şey, 'UTCNow' kullanması gerektiğidir. DST'den/'ye geçerken' Şimdi 'biraz garip davranış sergiliyor. Bunun bu kodu etkilediğinden emin değil. – CodesInChaos

10
  1. Sadece işlev içinde bir kez DateTime.Now olsun - Aksi değer değişebilir.
  2. <= kullanın, <'u kullanın. Zaman ayarlandıktan sonra bir mikrosaniye kontrol ederseniz, DateTime.Now'a eşit olacaktır. İthalatta çok hızlı olduğu için, ithalatı <'u kontrol eden farklı bir sorguda gösterilmeyecek şekilde üretim kodunda bu işe girdim.

kullanın bu kod:

DateTime now = DateTime.Now; 
DateTime yesterday = now.AddDays(-1); 
if (myDateTime > yesterday && myDateTime <= now) { 
    ... 
} 
+0

Maalesef oy veremiyorum çünkü çok düşüküm. –

İlgili konular