vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2018
 
zurück
Rubrik: Datum/Zeit und Timer · Datums- und Zeit-Funktionen   |   VB-Versionen: VB2005, VB200828.10.08
Datumseingaben auf Plausibilität prüfen

Eine Universalroutine zum Prüfen von Datumseingaben auf Plausibilität.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  10.691 
www.tools4vb.deSystem:  Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

In vielen Anwendung werden Felder für Datumseingaben benötigt. Sinnvoll ist es natürlich das Datum beim Verlassen des Eingabefeldes automatisch auf Plausibilität zu prüfen. Die Prüfung sollte zum einen das korrekte Format (tt.mm.jjjj), sowie die korrekten Angaben für Tag und Monat umfassen. Schön wäre es dann noch, wenn man auch zweistellige Jahresangaben vornehmen könnten und die Anwendung diese dann automatisch in die vierstellige Angabe umwandelt. Eine weitere Arbeitserleichterung für den Anwender wäre es auch, wenn keine Punkte eingegeben werden müssen - oder dass automatisch ein Punkt dargestellt wird, wenn man im Nummerblock der Tastatur das Komma drückt.

Der nachfolgende Tipp beherrscht alle o.g. Features und lässt sich ganz leicht in die eigene Anwendung einbinden.

Tastatureingaben prüfen

Private Sub txtDate_KeyPress(ByVal sender As Object, _
  ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDate.KeyPress
 
  ' aus Komma autom. Punkt machen
  If e.KeyChar = "," Then e.KeyChar = "."
 
  ' nur Zahlen und Punkt zulassen
  Select Case Asc(e.KeyChar)
    Case 48 To 57, 46, 8
    Case Else
      e.Handled = True
  End Select
End Sub

Prüfung beim Verlassen des Eingabefeldes

' Datum-Prüfroutine aufrufen
Private Sub txtDate_LostFocus(ByVal sender As Object, _
  ByVal e As System.EventArgs) Handles txtDate.LostFocus
 
  ' Datumseingabe prüfen
  Dim sDate As String = CheckAndFormatDate(txtDate.Text)
  If sDate.Length > 0 Then txtDate.Text = sDate
End Sub

Universelle Datum-Prüfroutine

''' <summary>
''' Datum auf Plausibilität prüfen
''' </summary>
''' <param name="Datum">Datum, das geprüft werden soll</param>
''' <returns>formatierte Datumsangabe oder Leerstring, wenn ungültiges Datum</returns>
Public Function CheckAndFormatDate(ByVal Datum As String) As String
  Dim Result As Boolean = False
  Dim TT As Short = 0
  Dim MM As Short = 0
  Dim JJ As Short = Year(Now)
  Dim FormatedDate As String = ""
 
  ' Ist überhaupt ein Datum eingetragen?
  If Datum.Replace(".", "").Trim.Length > 0 Then
 
    ' keine Punkte im Datum vorhanden
    If Datum.IndexOf(".") < 0 Then
 
      ' Eingabelänge mindestens 4-stellig
      If Datum.Length > 3 Then
        TT = Val(Datum.Substring(0, 2))
        MM = Val(Datum.Substring(2, 2))
 
        If Datum.Substring(4).Trim.Length > 0 Then
          JJ = Val(Datum.Substring(4))
        End If
        Result = True
      End If
    Else
 
      ' Eingabe enthält Punktangaben
      Dim Data() As String = Datum.Split(".")
 
      ' Tag ermitteln
      TT = Val(Data(0))
 
      ' Monat ermitteln
      If Data.Length > 0 Then
        MM = Val(Data(1))
 
        ' Jahr ermitteln
        If Data.Length > 1 AndAlso (Data(2).Trim.Length) > 0 Then JJ = Val(Data(2))
        Result = True
      End If
    End If
 
    If Result Then
      ' Tag und Monat prüfen
      If TT > 0 And TT < 32 AndAlso MM > 0 And MM < 13 Then
        ' wenn Jahresangabe zweistellig
        ' 2000 annehmen, wenn kleiner 30 ansonsten 1900
        If JJ < 100 Then JJ = IIf(JJ < 30, 2000 + JJ, 1900 + JJ)
 
        ' wenn Tag größer als maximale Anzahl Tage im angegeben Monat
        ' Tagesangabe korrigieren
        If TT > DateTime.DaysInMonth(JJ, MM) Then TT = DateTime.DaysInMonth(JJ, MM)
 
        ' wenn alles OK - Datum formatieren (tt.mm.jjjj)
        FormatedDate = New DateTime(JJ, MM, TT).ToString("dd.MM.yyyy")
      End If
    End If
  End If
 
  Return FormatedDate
End Function

Dieser Tipp wurde bereits 10.691 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

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

Aktuelle Diskussion anzeigen (2 Beiträge)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

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-2018 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