Soru Geçmişi:
Tarih ve zamanla çalışma, Visual Basic programlamasında her zaman ayrı bir alan olmuştur — eski Variant/Date türlerinden VB6'da, VB.NET'teki Date/DateTime yapılarına kadar. DateTime sınıfının ortaya çıkması, tarihleri daha esnek bir şekilde işleyebilme, sistem değerlerini alabilme, zaman aralıklarını hesaplayabilme ve tarihleri doğru bir şekilde biçimlendirebilme imkanı sağladı.
Sorun:
Sıklıkla, metinlerin DateTime'a dönüştürülmesinde hatalar ortaya çıkmaktadır (özellikle farklı yerellerde), zaman dilimleriyle yanlış çalışma, kullanıcıya gösterim için yanlış biçimlendirme veya sunucuya gönderim sırasında hatalar yaşanmaktadır.
Çözüm:
DateTime, tarih ve zamanı depolamak, aritmetik işlemler yapmak, karşılaştırmalar yapmak ve gerekli formata dönüştürmek için kullanılan bir yapıdır. Metin tarihlerini parse etmek için Parse, TryParse kullanılırken, biçimlendirme için ToString metodu ile format dizesi ve (isteğe bağlı) CultureInfo kullanılır.
Kod örneği:
Dim today As DateTime = DateTime.Now Dim birth As DateTime = New DateTime(1990, 1, 1) Dim formatted As String = today.ToString("yyyy-MM-dd HH:mm") Dim parsed As DateTime If DateTime.TryParse("15/06/2024", parsed) Then Console.WriteLine(parsed.ToString()) End If
Anahtar Özellikler:
1. DateTime.MinValue nedir?
DateTime.MinValue — 01.01.0001 00:00:00 tarihidir (örneğin, UNIX'te olduğu gibi 01.01.1970 değildir). "Değer atanmış mı?" kontrolü yaparken dikkatli kullanılmalıdır.
2. DateTime'da "zaman olmadan bir gün" saklanabilir mi?
Hayır, DateTime türü her zaman zaman değerlerini içerir. Sadece tarihi saklamak gerekiyorsa, zamanı "00:00:00" olarak atayın ve sadece tarihin biçimini çıktı alırken kullanın.
3. Zamanı yok sayarak tarihleri nasıl karşılaştırabilirim?
Tarihin sadece bir kısmını karşılaştırırken zamanı kaldırmalısınız:
Dim aDate As DateTime = DateTime.Now.Date Dim bDate As DateTime = someOtherDate.Date If aDate = bDate Then ...
Müşteri uygulaması, kullanıcının doğum tarihini TextBox aracılığıyla alır ve bunu doğrudan DateTime.Parse(textBox.Text) ile ayrıştırır. Avrupalı ve Amerikalı kullanıcılar tarihler farklı formatlarda girmektedir. Sonuç olarak — yanlış doğum tarihleri veya istisnalar oluşmaktadır.
Artılar:
Eksiler:
Tarih, DateTimePicker aracılığıyla veya TryParseExact(textBox.Text, "dd.MM.yyyy", CultureInfo.InvariantCulture, ...) ile alınmaktadır. Kodda yedekleme mekanizmaları ve kesin doğrulama bulunmaktadır.
Artılar:
Eksiler: