Bir hesabın süresinin 30 günden daha kısa sürede dolup dolmadığını anlamaya çalışıyorum. DateTime Compare'i doğru kullanıyor muyum?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
Bir hesabın süresinin 30 günden daha kısa sürede dolup dolmadığını anlamaya çalışıyorum. DateTime Compare'i doğru kullanıyor muyum?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
Yanıtlar:
DateTime Compare'i doğru kullanıyor muyum?
Hayır. CompareYalnızca iki tarihin göreceli konumu hakkında bilgi verir: daha az, eşit veya daha büyük. İstediğin şey şuna benzer:
if ((expiryDate - DateTime.Now).TotalDays < 30)
matchFound = true;
Bu, iki DateTimes çıkarır . Sonuç, TimeSpanbir TotalDaysözelliği olan bir nesnedir .
Ek olarak, koşul doğrudan şu şekilde yazılabilir:
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
Gerek yok if.
TotalDaysgünler yerine kullanın .
Daysen büyük bileşenidir TimeSpan. Bunu okuyan insanlar, Secondsmülkün aynı şekilde çalıştığını düşünerek bunu tahmin edebilirler .
Dayskendisi bile yanlış olabilir. Daysve TotalDaysdurumdur çünkü sadece burada aynıdır < 30, ama eğer bariz bir fark olacağını <= 30, çünkü TotalDaysgibi mayıs döner şey 30.421ise Dayshala getiriler 30.
olmalı
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
toplam günleri not edin, aksi takdirde daha akıllıca davranırsınız
TotalDaysolduğu kavramsal olarak kullanımına doğru alan. Uygulamada aynı sonucu veriyorlar, ancak Daysbunun en büyük bileşeni olduğu için TimeSpan, Aylar veya Yıllar bileşeni olsaydı ve bu farklı bir hikaye olurdu. Sadece deneyin Hours, Secondsya Millisecondsda nasıl çalıştığını görmek için.
Onun yerine bunu dene
if ( (expiryDate - DateTime.Now ).TotalDays < 30 ) {
matchFound = true;
}
Sırasıyla büyüktür, eşittir, küçüktür için 1, 0, -1 döndürmelerini karşılaştırın.
İstediğiniz:
if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(30)) <= 0)
{
bool matchFound = true;
}
Bu size doğru sonuç verecektir:
if ((expiryDate.Date - DateTime.Now.Date).Days < 30)
matchFound = true;
Karşılaştırma gereksizdir, Günler / Toplam Günler gereksizdir.
Tum ihtiyacin olan sey
if (expireDate < DateTime.Now) {
// has expired
} else {
// not expired
}
Son kullanma kriteriniz olarak dakikalar veya aylar hatta yılları kullanmaya karar verirseniz bunun işe yarayacağını unutmayın.
Atamak istediğinizi varsayarsak false(varsa) matchtime, bunu yazmanın daha basit bir yolu ...
matchtime = ((expiryDate - DateTime.Now).TotalDays < 30);
Hayır, Karşılaştır işlevi 1, 0 veya -1 döndürür. 0, iki değer eşit olduğunda, -1 ve 1, daha küçük ve daha büyük olduğunda, bu sıraya inanıyorum, ancak genellikle onları karıştırıyorum.
Hayır, doğru kullanmıyorsunuz.
Ayrıntılar için buraya bakın.
DateTime t1 = new DateTime(100);
DateTime t2 = new DateTime(20);
if (DateTime.Compare(t1, t2) > 0) Console.WriteLine("t1 > t2");
if (DateTime.Compare(t1, t2) == 0) Console.WriteLine("t1 == t2");
if (DateTime.Compare(t1, t2) < 0) Console.WriteLine("t1 < t2");
Aslında bu cevapların hiçbiri benim için işe yaramadı. Bunu şu şekilde yaparak çözdüm:
if ((expireDate.Date - DateTime.Now).Days > -30)
{
matchFound = true;
}
Bunu yapmayı denediğimde:
matchFound = (expiryDate - DateTime.Now).Days < 30;
Bugün, 2011-11-14 ve son kullanma tarihim 2011-10-17 idi, bu matchFound = -28'i aldım. 28 yerine. Bu yüzden son çeki tersine çevirdim.
// this isn't set up for good processing.
//I don't know what data set has the expiration
//dates of your accounts. I assume a list.
// matchfound is a single variablethat returns true if any 1 record is expired.
bool matchFound = false;
DateTime dateOfExpiration = DateTime.Today.AddDays(-30);
List<DateTime> accountExpireDates = new List<DateTime>();
foreach (DateTime date in accountExpireDates)
{
if (DateTime.Compare(dateOfExpiration, date) != -1)
{
matchFound = true;
}
}