Menggunakan .NET 3.5
Saya ingin menentukan apakah waktu saat ini jatuh dalam rentang waktu.
Sejauh ini saya punya waktu:
DateTime currentTime = new DateTime();
currentTime.TimeOfDay;
Saya mengabaikan cara mengubah rentang waktu dan membandingkan. Apakah ini akan berhasil?
if (Convert.ToDateTime("11:59") <= currentTime.TimeOfDay
&& Convert.ToDateTime("13:01") >= currentTime.TimeOfDay)
{
//match found
}
UPDATE1: Terima kasih semuanya atas saran Anda. Saya tidak terbiasa dengan fungsi TimeSpan.
Jawaban:
Untuk memeriksa waktu penggunaan sehari:
Untuk waktu absolut gunakan:
sumber
Beberapa jawaban yang baik di sini tetapi tidak ada yang mencakup kasus waktu mulai Anda berada di hari yang berbeda dari waktu akhir Anda. Jika Anda perlu melewati batas hari, maka sesuatu seperti ini dapat membantu:
Perhatikan bahwa dalam contoh ini batas waktu inklusif dan bahwa ini masih mengasumsikan perbedaan kurang dari 24 jam antara
start
danstop
.sumber
11:57 pm
dan ini berhasil:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
DateTime
jatuh dalam jam kerja yang ditentukan. Jam kerja bisa pada hari yang sama, tetapi mereka juga bisa span dua hari (misalnya, jam 3 sore - 1 jam operasional).jika Anda benar-benar ingin mengurai string ke dalam TimeSpan, maka Anda dapat menggunakan:
sumber
11:57 pm
dan ini berhasil:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
Sedikit fungsi ekstensi sederhana untuk ini:
sumber
start <= end
harus diubahstart < end
dan asumsi lain mungkin bahwa itu pada hari yang sama tetapi jika ini masalahnya, kemungkinan akan gagal jika Anda menggunakan Now.TimeOfDay karena termasuk milidetik dan menyebabkan berada di luar jangkauan.Coba gunakan objek TimeRange di C # untuk menyelesaikan tujuan Anda.
Di sinilah saya mendapatkan contoh menggunakan TimeRange
sumber
The
TimeOfDay
properti mengembalikanTimeSpan
nilai.Coba kode berikut:
Juga,
new DateTime()
sama denganDateTime.MinValue
dan akan selalu sama dengan1/1/0001 12:00:00 AM
. (Jenis nilai tidak dapat memiliki nilai default yang tidak kosong) Anda ingin menggunakanDateTime.Now
.sumber
Anda sangat dekat, masalahnya adalah Anda membandingkan DateTime dengan TimeOfDay. Yang perlu Anda lakukan adalah menambahkan properti .TimeOfDay ke akhir fungsi Convert.ToDateTime () Anda.
sumber
Apakah ini akan lebih mudah untuk menangani kasus batas hari? :)
sumber
Menggunakan Linq kita bisa menyederhanakan ini dengan ini
sumber
sumber