1 juni Standaard operators in .NET – deel 3 juni 1, 2017door Arjan van Huizen Visual Basic .NET Operators Dit is een reeds eerder gepubliceerde post van de vorige VBcentral website door Arjan van Huizen Ik vervolg mijn serie van artikelen over operators in .NET met deze keer aandacht voor bewerkingen op het datum/tijd type, DateTime. Het eerste artikel over String Operators vindt u hier en het tweede over de numerieke operators hier. Een DateTime in .NET heeft een minimale- en een maximale waarde. DateTime.minValue levert 01-01-0001 op en de maxValue 31-12-9999. Datum aanmaken Het aanmaken van een nieuwe datum in .NET gaat met: 'Nieuwe datum aanmaken. Jaar, maand, dag Dim d As New DateTime(2012, 3, 19) Als ik deze zou weergeven met: MessageBox.Show(d.ToLongDateString) dan zou het op mijn systeem ‘maandag 19 maart 2012’ weergeven. We kunnen overigens ook Date schrijven i.p.v. DateTime. Als we bij een DateTime type de tijd niet opgeven wordt op de achtergrond 12:00AM toegevoegd. We kunnen een datum ook als een ‘literal’ tekst schrijven. Bijvoorbeeld: Dim d2 As Date = #3/19/2012# Ook hier schrijven we weer eerst de maand dan de dag vanwege de Amerikaanse notatie in .NET code. Weergave van een datum en tijd Nu we weten hoe we een datum kunnen aanmaken kunnen we er ook bewerkingen op doen. En daar gaat dit artikel dan ook over. Eerst kijken we naar de weergave van een datum en tijd. Wat meteen opvalt is dat onze applicatie de datum wel weergeeft in het Nederlands. Dit komt omdat mijn Windows (Regio instelling) op het Nederlands staat ingesteld. d = DateTime.Now 'Tekst weergave van een datum Dim korteDatumWeergave As String = d.ToShortDateString '19-3-2012 Dim langeDatumWeergave As String = d.ToLongDateString 'maandag 19 maart 2012 Dim korteTijdWeergave As String = d.ToShortTimeString '13:05 (hh:mm) Dim langeTijdWeergave As String = d.ToLongTimeString '13:05:31 (hh:mm:ss - inclusief seconden) We kunnen ook een eigen formaat meegeven. Die kunnen we kwijt in de ToString(…) methode. Waarbij d staat voor dag, M (hoofdletter) voor maand en y voor het jaar. Voor de tijd gebruiken we h voor de uren en m (klein) voor de minuten. Als we een 24-uurs notatie willen schrijven voor de tijd, dan gebruiken we HH voor de uren i.p.v. hh. 'Eigen Datum/Tijd formaat MessageBox.Show(d.ToString("d MMMM yyyy HH:mm")) 'Geeft 19 maart 2012 13:05 Ook kunnen we losse gedeelten van een datum bepalen zoals de dag, maand of jaar. Een aantal voorbeelden: 'Dagen, maanden en jaren weergeven d = #3/19/2012# Dim dag As Integer = d.Day '19 Dim maand As Integer = d.Month '3 Dim jaar As Integer = d.Year '2012 Dim dagVanJaar As Integer = d.DayOfYear '79 Dim dagVanWeek As Integer = d.DayOfWeek '1 Dim aantalDagenInMaand As Integer = DateTime.DaysInMonth(2012, 3) '31 Rekenen met een datum We kunnen ook rekenen met een datum. We kunnen er dagen, maanden of jaren bij optellen of aftrekken, maar ook het verschil uitrekenen tussen twee data is mogelijk. De voorbeelden wijzen voor zich. 'Bewerkingen op een datum Dim d As DateTime = #3/19/2012# 'Controleren of het vandaag maandag is If d.DayOfWeek = vbMonday Then 'ja het is maandag Else 'Nee het is een andere dag End If 'Controleren of het jaar een schrikkeljaar is If DateTime.IsLeapYear(d.Year) Then 'ja het is een schrikkeljaar Else 'nee dit jaar niet End If 'Nieuwe datum berekenen die 30 dagen verder ligt dan onze huidige datum Dim vervaldatum As Date = d.AddDays(30) 'Nieuwe datum berekenen die 30 dagen terug ligt Dim vorigeDatum As Date = d.AddDays(-30) 'Verschil berekenen tussen 2 data Dim d1 As Date = #12/31/2012# Dim d2 As Date = Today Dim verschil As TimeSpan = d1.Subtract(d2) MessageBox.Show(String.Format("Tot Oudjaarsdag is het nog {0} dagen.", verschil.Days.ToString())) Controleren of een tekst een geldige datum is Als we via een control, de TextBox bijvoorbeeld een datum krijgen, dan moet je er rekening mee houden dat dat altijd een tekst is en geen datum. Tenzij de datum via een Calendar control komt. We moeten de datum die een String is dan ook gaan omzetten naar een datum. Als de Regio setting in Windows op Nederlands staat en je hebt in je applicatie niets ingesteld, dan zal de UI van je applicatie een DateTime datatype in het Nederlandse formaat weergeven en ook zo behandelen. Dit geldt overigens ook voor de notatie van komma getallen. We moeten nu alleen de inhoud van de TextBox gaan omzetten naar een DateTime type om er verdere bewerkingen mee te kunnen doen. Dat kunnen we bijvoorbeeld doen met Convert.ToDateTime(me.TextBox1.Text) maar beter is Parse of TryParse omdat we werken met een String naar DateTime conversie. 'Converteren van een tekst naar een datum Me.VandaagTextBox.Text = Date.Today.ToShortDateString Dim d As DateTime = Convert.ToDateTime(VandaagTextBox.Text) MessageBox.Show(d.ToLongDateString) Met de methode Parse of TryParse kunnen we een tekst omzetten naar een datum en met TryParse zelfs controleren of een datum geldig is. In het code voorbeeld voer ik bijvoorbeeld 31 februari 2012 in de TextBox in, hetgeen natuurlijk geen geldige datum is. In het geval van de Parse functie krijgen we een FormatException en in het geval van de TryParse een False terug. Met de TryParse functie kunnen we dus gecontroleerd een fout afvangen en dit teruggeven als Boolean. Deze TryParse functie zouden we in een eigen Method of Extension Method kunnen stoppen en bijvoorbeeld IsValidDate kunnen noemen en is dan een .NET equivalent van de VB6 IsDate() functie. Me.VandaagTextBox.Text = "31-02-2012" 'Date.Today.ToShortDateString Try ''Het gebruik van Parse Dim controleDatum As New DateTime controleDatum = DateTime.Parse(Me.VandaagTextBox.Text) 'TryParse. Hiermee controleren we of een tekst voorstelling van een datum geldig is If DateTime.TryParse(Me.VandaagTextBox.Text, controleDatum) Then 'Datum is geldig Else 'Datum is niet geldig MessageBox.Show("De ingevoerde datum is niet geldig") End If Catch ex As FormatException 'Geen geldige datum MessageBox.Show("De ingevoerde datum is niet geldig") End Try Hierbij zijn we aan het eind gekomen van deze 3-delige serie over standaard Operators in .NET.