Rubrik: Verschiedenes | VB-Versionen: VB5, VB6 | 01.08.02 |
Experimente mit Datum und Uhrzeit Mit Datum und Uhrzeit umzugehen scheint vielen Anwendern Schwierigkeiten zu bereiten. Deshalb möchten wir an Hand eines kleinen Projektes versuchen, einige Fragen hierzu zu beantworten. Anhand eines Schritt für Schritt Beispiels erfahren Sie, wie sich zu einem Datum eine bestimmte Anzahl Tage/Monate addieren lassen und lernen anschließend den Umgang mit der DateDiff-Funktion. | ||
Autor: Monika Kn?del | Bewertung: | Views: 51.699 |
Mit Datum und Uhrzeit umzugehen scheint vielen Anwendern Schwierigkeiten zu bereiten. Deshalb möchte ich an Hand eines kleinen Projektes versuchen, einige Fragen hierzu zu beantworten.
Addition von Tagen und Monaten
Mit Datum und Uhrzeit umzugehen scheint vielen Anwendern Schwierigkeiten zu bereiten. Deshalb möchte ich an Hand eines kleinen Projektes versuchen, einige Fragen hierzu zu beantworten. Da das Projekt Schritt für Schritt aufgebaut wird - schließlich soll man ja auch gleich einen Erfolg sehen - arbeiten wir nicht mit Steuerelementfeldern sondern mit einzelnen Labeln und Textboxen, was natürlich auch den Code etwas umständlich und langweilig erscheinen lässt. Dafür können Sie Ihr Projekt nach jedem Code-Block starten und sehen sofort die Auswirkungen.
Aber fangen wir einfach mal an und erstellen ein neues Projekt mit einem Label, dessen BorderStyle-Eigenschaft auf 1 - Fest Einfach gesetzt wird (dies gilt im Übrigen für alle weiteren Label). Nun der Code:
Private Sub Form_Activate() Label1.Caption = Now End Sub
Starten Sie Ihr Projekt und Sie erhalten in Label1 mittels der Now-Funktion das aktuelle Datum und die aktuelle Uhrzeit aus den Einstellungen für das Systemdatum und die Systemzeit auf Ihrem Computer angezeigt.
Nun erstellen wir zwei weitere Label und ergänzen den Code in Form_Activate wie folgt:
Private Sub Form_Activate() Label2.Caption = Format(Now, "hh:mm:ss") Label3.Caption = Format(Now, "dd.mm.yyyy") End Sub
Über die Format-Funktion haben wir jetzt Label2 die aktuelle Uhrzeit in derForm Stunden-Minuten-Sekunden und Label3 das aktuelle Datum in der Form Tag-Monat-Jahr zugeordnet.
Als nächstes benötigen wir eine TextBox (Text1) und ein weiteres Label. Mittels der Funktion DateAdd addieren wir zum aktuellen Datum eine beliebige Anzahl Tage hinzu und lassen uns das Ergebnis im Label anzeigen.
' Code in Form_Activate ergänzen Text1.Text = "0" Label4.Caption = ""
' Nun der Code für die Anzeige im Label Private Sub Text1_Change() On Error GoTo fehler1 Label4.Caption = DateAdd("d", CInt(Text1.Text), Date) Exit Sub fehler1: Label4.Caption = "Eingabefehler" Exit Sub End Sub
Mit der CInt-Funktion wird der Inhalt des Textfeldes in den Datentyp Integer umgewandelt. Der Ausdruck muss dabei als numerischer Wert interpretiert werden können, sonst tritt ein Laufzeitfehler auf. Genau aus diesem Grund setzen wir eine Fehlerbehandlungsroutine ein. Sollte das Textfeld keine Zahl enthalten, erscheint in Label4 der Vermerk Eingabefehler.
So - nachdem das nun geklappt hat, machen wir das noch mit Monaten - also noch ein Textfeld (Text2) und noch ein Label (Label5):
' Code in Form_Activate ergänzen Text2.Text = "0" Label5.Caption = ""
' Nun der Code für die Anzeige im Label Private Sub Text2_Change() On Error GoTo fehler2 Label5.Caption = DateAdd("m", CInt(Text2.Text), Date) Exit Sub fehler2: Label5.Caption = "Eingabefehler" Exit Sub End Sub
Ich gehe mal davon aus, dass eine Erklärung hier nicht mehr notwendig ist, Oder?
DateDiff - Differenz in Tage und Monaten
Für den nächsten Schritt benötigen wir wieder zwei Textboxen (Text3 und Text4) sowie ein Label (Label6). Mit folgendem Code können wir die Anzahl der Tage, die zwischen zwei Datumsangaben liegen (DateDiff-Funktion), ermitteln und anzeigen lassen:
' Code in Form_Activate ergänzen Text3.Text = Format(Now, "dd.mm.yyyy") Text4.Text = Format(Now, "dd.mm.yyyy") Label6.Caption = ""
' Nun der Code für die Anzeige im Label Private Sub Text3_Change() On Error GoTo fehler3 Label6.Caption = DateDiff("d", Text4.Text, Text3.Text) Exit Sub fehler3: Label6.Caption = "Fehler" Exit Sub End Sub
Private Sub Text4_Change() On Error GoTo fehler4 Label6.Caption = DateDiff("d", Text3.Text, Text4.Text) Exit Sub fehler4: Label6.Caption = "Fehler" Exit Sub End Sub
Wenn Sie das "d" im Code durch "m" ersetzen, erhalten Sie die Differenz in Monaten.
Als nächstes prüfen wir mit der IsDate-Funktion, ob ein Datum eingegeben wurde. Zudem teilen wir das Datum auf in Tag, Monat und Jahr und geben dies in separaten Label aus. Wir benötigen hierzu wieder eine Textbox (Text5) sowie 5 weitere Label (Label7 bis Label11). Und jetzt der Code:
' Code in Form_Activate ergänzen Text5.Text = "" Label7.Caption = "" Label8.Caption = "" Label9.Caption = "" Label10.Caption = "" Label11.Caption = ""
' Nun der Code für die Anzeige in den einzelnen Label Private Sub Text5_Change() If IsDate(Text5.Text) Then Label7.Caption = "OK" Label8.Caption = CDate(Text5.Text) Label9.Caption = Day(Text5.Text) Label10.Caption = Month(Text5.Text) Label11.Caption = Year(Text5.Text) Else Label7.Caption = "FALSCH" End If End Sub
Wenn der Inhalt der Textbox als Datum interpretiert werden kann - und dies gilt auch für die Schreibweise mit ausgeschriebenem Monat - wird in Label 7 OK angezeigt, ansonsten FALSCH. In Label 8 wird der Inhalt der Textbox mit Zahlenwiederholt und in den Label 9 bis 11 jeweils Tag, Monat und Jahr.
Zeit-Differenzen im Format hh:mm:ss
Nachdem wir nun mit Tagen und Monaten gerechnet haben, wollen wir dies auch mit Zeiten ausprobieren. Hierzu habe ich Dieters Tipp Zeit-Differenz berechnen verwendet, den ich noch um Sekunden ergänzt habe. Wir fügen unserem Projekt nochmals 2 Textboxen (Text6 und Text7), ein Label (Label12) und einen CommandButton (Command1) hinzu. Der CommandButton erhält die Beschriftung "Berechnen" und dann wird noch dieser Code benötigt:
' Code in Form_Activate ergänzen Text6.Text = Format(Now, "hh:mm:ss") Text7.Text = Format(Now, "hh:mm:ss") Label12.Caption = ""
' Nun der Code für die Anzeige im Label Private Sub Command1_Click() Dim lngSek As Long Dim lngMin As Long Dim lngStd As Long ' Zeitdifferenz lässt sich nur berechnen, wenn man ' auch ein gültiges Datum mit angibt Dim sDate1 As String Dim sDate2 As String sDate1 = CDate(Format$(Now, "dd.mm.yyyy")) ' Wenn Inhalt von Text7 < Inhalt von Text6 sDate2 = DateAdd("d", IIf(Text7.Text < Text6.Text, 1, 0), sDate1) ' Zeit-Differenz in Sekunden lngSek = DateDiff("s", CDate(sDate1 & " " & Text6.Text), _ CDate(sDate2 & " " & Text7.Text)) ' Und jetzt ins Format hh:mm:ss umwandeln lngMin = Int(lngSek / 60) lngSek = lngSek - (lngMin * 60) lngStd = Int(lngMin / 60) lngMin = lngMin - (lngStd * 60) Label12.Caption = "Zeit-Differenz: " & _ Format$(lngStd, "00") & ":" & Format$(lngMin, "00") & _ ":" & Format$(lngSek, "00") End Sub
Den Anfangswert von Text6 und Text7 habe ich auf die aktuelle Uhrzeit gesetzt. Sie können die Felder natürlich auch leer lassen. Da der Code bereits kommentiert ist, kann hier auf Wiederholungen verzichtet werden.
Jetzt können Sie die einzelnen Felder noch mit Label versehen, denen Sie einen Erläuterungstext hinzufügen, damit man sich im Projekt auch zurechtfindet.
Nun wünsche ich Ihnen noch viel Spaß mit Ihrem Datums- und Zeitprojekt.