IX.
Datum, Tijd en Timer-object
A. Hoe worden tijd en datum in VB aangeduid? Zowel datum als tijd worden als een getal met decimalen opgeslagen. Het gedeelte voor de komma geeft de datum aan, het gedeelte achter de komma geeft de tijd aan. Ø Maak even de volgende oefening. Maak een nieuw project aan. Geef het als naam Datum1 bijvoorbeeld, en zet het weer in een mapje met dezelfde naam op uw diskette. Zet de eigenschap Autoredraw van het formulier op true. Dimensioneer de volgende variabelen: Option Explicit Dim dblDatum As Double Dim Datum As Date
Je ziet dat Date ook een variabel-type is., en kan datum én tijd bevatten Ø Plaats de volgende code in het event Form_Load: Private Sub Form_Load() ' we voeren een datum in (let op de schrijfwijze!) Datum = "12/2/2001 15:30:45" 'Druk het resultaat op het formulier af: Print "Datum en tijd: " & Datum 'zet de datumwaarde in de double-variabele dblDatum = Datum ' en druk hem af Print "Getalwaarde: " & dblDatum End Sub
Het resultaat bij het opstarten van het programma ziet eruit als hiernaast: Met Print Datum wordt de datum afgedrukt op het formulier. De datumvariabele bevat nochtans gewoon een decimaal getal. Maar dat het als datum 12/2/2001 15:30:45 wordt afgedrukt, ligt aan het feit dat VB “ziet” dat dit een datum-type is, en print jet dan ook als een echte datum. Het echte getal kunnen we zien als we de datum in de double-variabele dbldatum plaatsen. Dit blijkt nu de waarde 36934,646…. te bevatten. Hoe komt VB aan dit getal? Datum= er zijn 36934 dagen verlopen sinds 31/12/1899 Tijd = 15:30:45 is het 0.64635…ste gedeelte van 1 dag
Visual Basic
door ir. C.Daniels
IX-1
Ø Verander de datum in het programma eens in 31/12/1899 00:00:00 1/6/1950 12:00:00 31/8/1956 18:00:00 en interpreteer het resultaat B. Datumconversie met CDATE() Een getalwaarde kan steeds omgezet worden in een datumwaarde met de functie Cdate(). Tussen de haakjes plaatst u de doublewaarde, en als resultaat krijgt u de datum en de tijd die erbij hoort. Ø Plaatse de volgende (vetjes gedrukte) code bij in uw programma en voer uit. Interpreteer het resultaat: …. ' en druk hem af Print "Getalwaarde: " & dblDatum Print CDate(30590.75) End Sub
C. Rekenen met datum en tijd Dit is heel eenvoudig als je weet dat “één” gelijk is aan één dag, of 24 uren. Stel dat we bij de datum 1/1/2000 duizend dagen willen bijtellen. Welke dag is het dan? In VB programmeert u dit heel eenvoudig als : … Print CDate(30590.75) Datum = "1/1/2000" dblDatum = Datum + 1000 Print CDate(dblDatum) End Sub
Wat is het resultaat? Met de format-functie kunt u veel preciezer aangeven hoe u de datum wil zien: Ø Verander de code in het print-statement eens als volgt: Print Format(CDate(dblDatum), "dddd dd/mmm/yyyy hh:mm:ss")
Wat is het resultaat ?
Ø Welke code heeft u nodig om 1000 dagen en 36 uur bij te voegen? Probeer uit!
Visual Basic
door ir. C.Daniels
IX-2
Ø Zoek in de help de verschillende mogelijkheden op om datum en tijd te formatteren met de functie Format()
D. Now, Date$ en Time$ De systeemfunctie Now bevat de huidige datum én tijd. Date$ bevat de datum van vandaag, en Time$ bevat de tijd. (Test dit even uit in het Immediate-venster!)
Ø Oefening: Schrijf een programma dat de datum en tijd van nu in de caption schrijft van het formulier. Bewaar het bijvoorbeeld als Datum2 in een aparte map met die naam. Ø Plaats er twee tekstvakken en labels in waarin u een aantal dagen en een aantal uren kan ingeven. Door te klikken op een knop Bereken krijgt u dan de nieuwe datum en tijd in een label onderaan. Het zou er ongeveer als volgt kunnen inzien.
txtDagen
txtUren lblResultaat
cmdBerekenen
Probeer zelf eens de nodige code te ontwikkelen! Als u het ECHT niet vindt, kunt u hieronder spieken in de oplossing die ik zelf bedacht. Option Explicit Dim dblDagen As Double Dim dbluren As Double Dim HuidigeDatum_Tijd As Date Dim Datum As Date Private Sub cmdBerekenen_Click() dblDagen = Val(txtDagen.Text) dbluren = Val(txtUren.Text) Datum = CDate(HuidigeDatum_Tijd) + dblDagen + dbluren / 24 lblResultaat.Caption = Format(Datum, "dddd dd/mm/yyyy hh:mm:ss") txtDagen.SetFocus End Sub Private Sub Form_Load() HuidigeDatum_Tijd = Now Form1.Caption = Format(HuidigeDatum_Tijd, "dddd, dd mmmm yyyy hh:mm:ss") End Sub
Visual Basic
door ir. C.Daniels
IX-3
E. Tijd- en datumfuncties Voor de datum bestaan volgende functies: Year (datum) Month (datum) Day (datum) Date = datum
Weekday (datum) Hour (tijd) Minute (tijd) Second (tijd)
geeft het jaar als een geheel getal geeft de maand 1-12 geeft de dag van de maand 1 –31 verandert de systeemdatum Voorbeeld: date = #february 12,2002# verandert de systeemdatum naar 12 februari 2002 geeft als resultaat de dag in de week (1 = zondag, 2 = maandag,enz.) Voorbeeld Weekday(#march 8,2001#) geeft als resultaat 5 Geeft de uren van een tijdwaarde Geeft de minuten uit een tijdwaarde Geeft de seconden uit een tijdwaarde
Ø Probeer deze functies eens uit in het Immediate-venster!
Ø Oefening: Ontwerp een programma, waarin je een datum kan aangeven, en als je op een drukknop klikt, vertelt het prgramma in een messagebox, op welke weekdag deze datum valt.
cmdGeefdag txtDatum Probeer zelf eens de nodige code te ontwikkelen! Met de functie IsDate() kunt u checken of een tekst een geldige datum voorstelt. Als u het ECHT niet vindt, kunt u hieronder spieken … Visual Basic
door ir. C.Daniels
IX-4
Option Explicit Dim datum As Date Private Sub cmdGeefdag_Click() Dim i As Integer Dim dag As String 'Controleer of het een correcte datum is! If IsDate(txtdatum.Text) Then datum = CDate(txtdatum.Text) Select Case Weekday(datum) Case 1: dag = "zondag" Case 2: dag = "maandag" Case 3: dag = "dinsdag" Case 4: dag = "woensdag" Case 5: dag = "donderdag" Case 6: dag = "vrijdag" Case 7: dag = "zaterdag" End Select i = MsgBox(txtdatum.Text + " valt op een " + dag, _ vbInformation, "Weekdag") Else i = MsgBox("Verkeerde datum!", vbCritical, "Fout!") End If End Sub
F. Het Timer-object Het Timer-object is speciaal bedoeld om na een vaste tijd een bepaalde opdracht uit te voeren. De belangrijkste eigenschap is het Interval. Dit geeft aan om de hoeveel milliseconden de timer “tikt”. Bij elke tik wordt het event Timer1_Timer aangeroepen. Zet u het timer-interval gelijk aan nul, dan stopt de timer. Om dit even uit te testen, proberen we het volgende. Ø Maak een nieuw project aan en bewaar het in een mapje Timer1 bijvoorbeeld op uw diskette Ø Plaats een timer object op uw formulier. De plaats waar u dit plaatst heeft geen belang, want het figuurtje is niet zichtbaar als u het programma runt. Ø Zet de eigenschap interval = 1000, dwz dat de timer elke seconde éénmaal tikt.
Visual Basic
door ir. C.Daniels
IX-5
Ø Plaats de volgende code in het event Timer1_Timer: Private Sub Timer1_Timer() Static i As Integer i = i + 1 Print "Timer-tik #" + Str(i) End Sub
U krijgt dan dit resultaat: Elke seconde wordt een nieuw lijntje afgedrukt.
Het statement Static U ziet dat we hier het woordje Static ipv van Dim hebben gebruikt. Het woordje static betekent dat de waarde van de variabele i na elke aanroep blijft behouden. Ø Verander het woordje Static eens in Dim, en kijk wat er gebeurt!
Oefening: gebruik we deze kennis eens om een eenvoudig digitaal klokje te ontwerpen, zoals hieronder.
Het hele programma heeft slechts 3 lijntjes code die u zelf moet schrijven…. Tip: Laat de timer elke seconde de opschriften van de drie labels opniuw schrijven. Maak gebruik van de datum- en tijdfuncties die u in dit hoofdstuk heeft geleerd!
Voor de liefhebbers: Op mijn website http://iwt.khlim.be/~cdaniels vindt u een voorbeeld van een analoog klokje. (Kijk bij Cursussen Excel en VB -->Voorbeeldprogramma’s in VB.)
+
Visual Basic
door ir. C.Daniels
IX-6
Visual Basic
door ir. C.Daniels
IX-7