Kusura bakma ama kod DateTime kullanılan yerlerde çok garip ve hataya müsait yazılmış. Biraz satır satır gitmek daha iyi.
DateTime bugün = DateTime.Parse(DateTime.Now.ToShortDateString());
Buradaki değişken DateTime tipinde ve içeriği başka bir DateTime değerinden geliyor (getirilmek isteniyor demek daha doğru). Neden DateTime'dan DateTime değeri getirmek için önce değeri String'e çevirip
sonra DateTime'a çevirmeye çalışıyorsunuz????? Tek amacı DateTime değerinden saat kısmını atmak olarak görünüyor. O zaman basitçe yapabileceğiniz:
DateTime bugün = DateTime.Today;
// ya da - burada Today seçeceği olduğu için gereksiz
DateTime bugün = DateTime.Now.Date;
DateTime yeni = DateTime.Parse(dateTimePicker1.Text);
Yine yukarıdaki gibi gereksiz bir işlem. DT'dan DT elde etmek için arada yine string ve parse işlemi var. Oysa basitçe:
DateTime yeni = dateTimePicker1.Value.Date;
if (DateTime.Parse(DateTime.Now.ToShortTimeString())>DateTime.Parse(item.Text))
Yazım yine hatalı, hatanın temel nedeni de, kod hata versin vermesin mantık hatasının olması. Günün herhangi bir anının saat kısmının varsayılan şekilde string'e çevrilmesi, onunla >, <
gibi karşılaştırma yapılma şansını ortadan kaldırıyor (istenen karşılaştırma alfabetik değil ise). Saat karşılaştırma için string'e çevirmenin amacı ne olabilir ki? Tam aksine string olan değeri TimeSpan'a çevirmek daha doğru. Yinede mantıksal bir hata
var, karşılaştırmanın bir tarafı TimeSpan olarak görünüyor, diğer tarafı ise DateTime.
Burada 'item' ne onu bilmediğimizden, daha fazla yorum yapmak yanlış olur. Sadece hata mesajından yola çıkarak, şöyle bir hata olabilir:
item.Text "13.05.2019 11:00" olabilir, DateTime.Parse("13.05.2019 11:00") hata verir, çünkü 13.ay yoktur (varsayılan tarih saat formatı aa/gg/yyyy ss:dd:ss).
DateTime.Parse("13.05.2019 11:00", new CultureInfo("tr-TR"))
doğrusu.