Apakah ada cara .net yang lebih baik untuk memeriksa apakah DateTime telah terjadi 'hari ini' daripada kode di bawah?
if ( newsStory.WhenAdded.Day == DateTime.Now.Day &&
newsStory.WhenAdded.Month == DateTime.Now.Month &&
newsStory.WhenAdded.Year == DateTime.Now.Year )
{
// Story happened today
}
else
{
// Story didn't happen today
}
Jawaban:
Harus melakukan trik.
sumber
sumber
Mencoba
sumber
Solusi saya:
sumber
Jika NewsStory juga menggunakan DateTime, bandingkan saja properti Date, dan Anda sudah selesai.
Namun, ini tergantung pada apa sebenarnya arti "hari ini". Jika sesuatu diposting sebelum tengah malam, itu akan menjadi "lama" setelah waktu yang singkat. Jadi mungkin akan lebih baik untuk menyimpan tanggal cerita yang tepat (termasuk waktu, sebaiknya UTC) dan memeriksa apakah kurang dari 24 jam (atau apa pun) telah berlalu, yang sederhana (tanggal dapat dikurangi, yang memberi Anda TimeSpan dengan TotalHours atau properti TotalDays).
sumber
Anda dapat menerapkan metode ekstensi DateTime.
Buat kelas baru untuk metode ekstensi Anda:
Dan sekarang, di mana pun pada kode Anda, di mana Anda ingin melakukan tes ini, Anda harus menyertakan penggunaan:
Dan kemudian, gunakan metode ekstensi:
sumber
Date
karenaTimeSpan
akan selalu 00:00:00.FYI,
newsStory.Date == DateTime.Today
akan mengembalikan hasil perbandingan yang sama dengan pengkodean
newsStory == DateTime.Today
dimana
newsStory
aDateTime
bendaNET cukup pintar untuk menentukan Anda ingin membandingkan berdasarkan Tanggal saja dan menggunakannya untuk Bandingkan internal. Tidak yakin mengapa, dan benar-benar kesulitan menemukan dokumentasi untuk perilaku ini.
sumber
Seperti yang disarankan Guillame dalam komentar , bandingkan nilai
Date
properti:sumber
Coba ini:
sumber
baik, DateTime memiliki properti "Tanggal" dan Anda bisa membandingkan berdasarkan itu. Namun melihat dokumennya, tampaknya mendapatkan properti tersebut sebenarnya membuat waktu baru dengan komponen waktu disetel ke tengah malam, jadi mungkin lebih lambat daripada mengakses masing-masing komponen, meskipun jauh lebih bersih dan lebih mudah dibaca.
sumber
if (newsStory.ToShortDateString() == DateTime.Today.ToShortDateString()) return "Todtay";
sumber
Bagaimana tentang
Tetapi ini juga akan kembali benar untuk 1 Januari 2008 dan 1 Januari 2009, yang mungkin atau mungkin tidak sesuai dengan keinginan Anda.
sumber
Anda bisa menggunakan
DateTime.Now.DayOfYear
sumber