Achtergrond:
Werken met datums en tijden is altijd een apart aspect van programmeren in Visual Basic geweest — van de oude types Variant/Date in VB6 tot de structuren Date/DateTime in VB.NET. Het verschijnen van de DateTime-klasse maakt het mogelijk om flexibeler met datums om te gaan, systeemwaarden te verkrijgen, intervallen te berekenen en datums correct te formatteren.
Probleem:
Er ontstaan vaak fouten bij het converteren van strings naar DateTime (vooral bij verschillende localiteiten), onjuiste werken met tijdzones, en verkeerde formatting voor gebruikersweergave of verzending naar de server.
Oplossing:
DateTime is een structuur die het mogelijk maakt om datum en tijd op te slaan, wiskundige bewerkingen uit te voeren, vergelijkingen te maken en om te zetten naar het gewenste formaat. Voor het parseren van string datums wordt Parse, TryParse gebruikt, en voor het formatteren de methode ToString met een opmaakstring en (optioneel) CultureInfo.
Voorbeeldcode:
Dim vandaag As DateTime = DateTime.Now Dim geboorte As DateTime = New DateTime(1990, 1, 1) Dim geformatteerd As String = vandaag.ToString("yyyy-MM-dd HH:mm") Dim geparsed As DateTime If DateTime.TryParse("15/06/2024", geparsed) Then Console.WriteLine(geparsed.ToString()) End If
Belangrijke kenmerken:
1. Wat is de waarde van DateTime.MinValue?
DateTime.MinValue is de datum 01.01.0001 00:00:00 (en niet bijvoorbeeld 01.01.1970 zoals in UNIX). Gebruik met voorzichtigheid bij het controleren van "is er een waarde ingesteld".
2. Kun je "een dag zonder tijd" opslaan in DateTime?
Nee, het type DateTime omvat altijd tijdwaarden. Als je alleen de datum wilt opslaan, wijs dan de tijd "00:00:00" toe en gebruik alleen het datumnotatie bij weergave.
3. Hoe vergelijk je datums correct zonder de tijd te negeren?
Om alleen het datummedeel te vergelijken, verwijder de tijd:
Dim aDatum As DateTime = DateTime.Now.Date Dim bDatum As DateTime = someOtherDate.Date If aDatum = bDatum Then ...
De klantapplicatie accepteert de geboortedatum van de gebruiker via TextBox en parseert deze direct via DateTime.Parse(textBox.Text). Europese en Amerikaanse gebruikers voeren datums in verschillende formaten in. Dit resulteert in onjuiste geboortedata of uitzonderingen.
Voordelen:
Nadelen:
De datuminvoer gebeurt via DateTimePicker of met behulp van TryParseExact(textBox.Text, "dd.MM.yyyy", CultureInfo.InvariantCulture, ...). In de code zijn fallback-mechanismen en nauwkeurige validatie voorzien.
Voordelen:
Nadelen: