vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Verschiedenes   |   VB-Versionen: VB5, VB601.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?delBewertung:     [ Jetzt bewerten ]Views:  51.698 

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.

 

Dieser Workshop wurde bereits 51.698 mal aufgerufen.

Über diesen Workshop im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Workshop, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel