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 ' 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.
Dieser Workshop wurde bereits 51.551 mal aufgerufen.
Anzeige
![]() ![]() ![]() Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... Tipp des Monats ![]() Dieter Otter PopUp-Menü wird nicht angezeigt :-( In diesem Tipp verraten wir Ihnen, wie Sie Probleme mit PopUp-Menüs umgehen können, wenn diese unter bestimmten Umständen einfach nicht angezeigt werden. Neu! sevCommand 4.0 ![]() Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. |
|||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |