Saya mencoba mencari tahu apakah akun kedaluwarsa dalam waktu kurang dari 30 hari. Apakah saya menggunakan Perbandingan DateTime dengan benar?
if (DateTime.Compare(expiryDate, now) < 30)
{
matchFound = true;
}
Apakah saya menggunakan Perbandingan DateTime dengan benar?
Tidak. Compare
Hanya menawarkan informasi tentang posisi relatif dua tanggal: kurang, sama, atau lebih besar. Yang Anda inginkan adalah seperti ini:
if ((expiryDate - DateTime.Now).TotalDays < 30)
matchFound = true;
Ini mengurangi dua DateTime
s. Hasilnya adalah TimeSpan
objek yang memiliki TotalDays
properti.
Selain itu, kondisional dapat ditulis langsung sebagai:
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
Tidak if
perlu.
TotalDays
sebagai pengganti hari.Days
merupakan komponen terbesarTimeSpan
. Orang yang membaca ini dapat memperkirakan hal itu dengan berpikir bahwaSeconds
properti tersebut bekerja dengan cara yang sama.Days
dirinya sendiri juga bisa salah.Days
danTotalDays
sama di sini hanya karena kondisinya< 30
, tetapi akan ada perbedaan yang jelas jika dulu<= 30
, karenaTotalDays
mungkin mengembalikan sesuatu seperti30.421
saatDays
masih kembali30
.seharusnya
matchFound = (expiryDate - DateTime.Now).TotalDays < 30;
catat total hari jika tidak, Anda akan mendapatkan perilaku werid
sumber
TotalDays
secara konseptual adalah bidang yang benar untuk digunakan. Pada prakteknya mereka memberikan hasil yang sama tetapi hanya karenaDays
merupakan komponen terbesarTimeSpan
, seandainya ada komponen Bulan atau Tahun dan ini akan menjadi cerita yang berbeda. Coba sajaHours
,Seconds
atauMilliseconds
lihat cara kerjanya.Saya akan melakukannya seperti ini:
TimeSpan diff = expiryDate - DateTime.Today; if (diff.Days > 30) matchFound = true;
Bandingkan hanya menanggapi dengan bilangan bulat yang menunjukkan cuaca yang pertama lebih awal, sama atau lebih baru ...
sumber
Coba ini sebagai gantinya
if ( (expiryDate - DateTime.Now ).TotalDays < 30 ) { matchFound = true; }
sumber
Bandingkan pengembalian 1, 0, -1 untuk masing-masing lebih besar dari, sama dengan, kurang dari.
Kamu ingin:
if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(30)) <= 0) { bool matchFound = true; }
sumber
Ini akan memberi Anda hasil yang akurat:
if ((expiryDate.Date - DateTime.Now.Date).Days < 30) matchFound = true;
sumber
Membandingkan tidak diperlukan, Hari / TotalDays tidak diperlukan.
Yang kamu butuhkan adalah
if (expireDate < DateTime.Now) { // has expired } else { // not expired }
perhatikan ini akan berhasil jika Anda memutuskan untuk menggunakan menit atau bulan atau bahkan tahun sebagai kriteria kadaluwarsa Anda.
sumber
Dengan asumsi Anda ingin menetapkan
false
(jika berlaku) kematchtime
, cara penulisan yang lebih sederhana adalah ..matchtime = ((expiryDate - DateTime.Now).TotalDays < 30);
sumber
Tidak, fungsi Bandingkan akan mengembalikan 1, 0, atau -1. 0 ketika kedua nilai sama, -1 dan 1 berarti kurang dari dan lebih besar dari, saya percaya urutan itu, tetapi saya sering mencampuradukkannya.
sumber
Tidak, Anda tidak menggunakannya dengan benar.
Lihat di sini untuk detailnya.
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");
sumber
Yang ingin Anda lakukan adalah mengurangi dua DateTimes (expiryDate dan DateTime.Now). Ini akan mengembalikan objek berjenis TimeSpan. TimeSpan memiliki properti "Days". Bandingkan angka itu dengan 30 untuk jawaban Anda.
sumber
Tidak, itu tidak benar, coba ini:
DateTime expiryDate = DateTime.Now.AddDays(-31); if (DateTime.Compare(expiryDate, DateTime.Now.AddDays(-30)) < 1) { matchFound = true; }
sumber
Sebenarnya tidak ada dari jawaban ini yang berhasil untuk saya. Saya menyelesaikannya dengan melakukan seperti ini:
if ((expireDate.Date - DateTime.Now).Days > -30) { matchFound = true; }
Ketika saya mencoba melakukan ini:
matchFound = (expiryDate - DateTime.Now).Days < 30;
Hari ini, 2011-11-14 dan tanggal kadaluwarsa saya adalah 2011-10-17 saya mendapatkan matchFound = -28. Bukannya 28. Jadi saya membalik cek terakhir.
sumber
// 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; } }
sumber
Anda dapat mencoba melakukan seperti ini:
var daysPassed = (DateTime.UtcNow - expiryDate).Days; if (daysPassed > 30) { // ... }
sumber