Standaard operators in .NET – deel 3

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.

Nieuwsbrief

Blijf op de hoogte van alles wat op VBcentral gebeurd. Meld je nu aan voor onze nieuwsbrief! »

Over ons

Wij zijn gek op het Microsoft .NET ontwikkelplatform en haar ontwikkeltalen, maar we hebben een sterke voorkeur voor Visual Basic .NET! »

Neem contact op

VBcentral.nl
Bataafseweg 20
7101 PA Winterswijk
Nederland
+31 (543) 538 388
info@vbcentral.nl