Datum und Zeit mit Access

Manfred Hoffbauer, Düsseldorf

Das Speichern von Datums- und Zeitwerten mit Access birgt wenig Geheimnisse. Sie fügen einer Tabelle ein Feld vom Datentyp “Datum/Zeit” hinzu und schon können Sie Werte in dieses Feld eingeben. Die tägliche Praxis im Umgang mit Datums- und Zeitwerten stellt aber höhere Anforderungen. Mit den Tipps aus dem folgenden Beitrag können Sie die meisten der auftretenden Fragen beantworten.

Innerhalb Deutschlands geben die meisten Menschen einen Datumswert intuitiv als 5.3.2004, als 05.03.2004 oder schreibfaul als 5.3.04 oder in Mischformen ein. Access kann all diese Schreibweisen verstehen und interpretiert sie als den gleichen Tag, also den 5.3.2004.

Selbst Angaben im Klartext wie beispielsweise 5. März 2004 sind bei der Datumseingabe erlaubt. Sie müssen lediglich darauf achten, dass Ihre Eingabe den in der Systemsteuerung von Windows getätigten Ländereinstellungen entspricht.

Wie speichert Access Datums- und Zeitwerte

Dass Access Ihre Eingabe richtig versteht, können Sie leicht feststellen, indem Sie ein Formular mit einem Textfeld namens txtDatumZeit anlegen. Fügen Sie dem Formular ein weiteres Textfeld mit dem folgenden Steuerelementinhalt hinzu:

=Format([txtDatumZeit];"tt.mm.jjjj")

Mit einem weiteren Textfeld können Sie die Zeitangabe aus dem Eingabewert ermitteln. Geben Sie folgenden Steuerelementinhalt ein:

=Format([txtDatumZeit];"hh:nn:ss")

Access erkennt selbstständig, dass der eingegebene Text ein Datum- und Zeitwert ist, und wandelt ihn automatisch in diesen Datentyp um. Die Format-Funktion formatiert den Wert aus dem Steuerelement txtDatumZeit im ersten Fall als Datums- und im zweiten Fall als Zeitwert.

Mit tt.mm.jjjj erhalten Sie die Anzeige mit zweistelligem Tages-, zweistelligem Monats- und vierstelligem Jahreswert. Das Zeitformat zeigt Stunden, Minuten und Sekunden ebenfalls zweistellig an.

Nun können Sie nacheinander verschiedene Datumswerte in das Textfeld eingeben und beobachten, welchen Datumswert Access ermittelt. Ein Beispiel hierfür sehen Sie in Abb. 1.

Abb. 1: Mit diesem Formular können Sie prüfen, ob Access Ihre Datums- und Zeiteingabe versteht.

Sie können allerlei verschiedene Eingaben für den gleichen Tag tätigen. Wenn Sie wissen wollen, wie Access die Werte intern speichert, dann fügen Sie drei weitere Steuerelemente mit folgenden Formeln als Steuerelementinhalt hinzu:

=ZDouble(ZDate([txtDatumZeit]))
=DatWert([txtDatumZeit])
=ZeitSeriellStr([txtDatumZeit])

Besonders interessant ist die ZDate-Funktion (englisch: CDate). Diese Funktion wandelt irgendeinen Wert, in diesem Fall die eingegebene Zeichenkette, in den Datentyp Datum/Zeit um. Der anschließende Aufruf von ZDouble (englisch: CDbl) führt dazu, dass Access den berechneten Wert als Zahl mit Nachkommastellen anzeigt. Ein Beispiel hierfür sehen Sie in Abb. 2.

Abb. 2: Diese Abbildung enthält ein Beispiel für die Umrechnung eines Datums- und Zeitwertes in einen Double-Wert.

Access wandelt beispielsweise 4.03.04 10:04:05 in den Double-Wert 38050,4195023148 um. Der Grund hierfür besteht darin, dass Access Datums- und Zeitwerte als Double-Werte kodiert.

Der ganzzahlige Anteil speichert die Anzahl der Tage in Bezug auf den 30.12.1899. Negative Werte geben die Anzahl der Tage vor diesem Datum an und positive Werte die Anzahl der Tage nach diesem Datum. Der Nachkommateil entspricht jeweils der seit 0 Uhr vergangenen Zeit. Der Zeitpunkt 30.12.1899 0:00:00 entspricht dem Double-Wert 0,0.

Abb. 3: Die Abbildung zeigt ein Beispiel für die Addition von zwei Datums-/Zeit-Werten.

Rechnen mit Datum und Zeit

Auf Grund der internen Umrechnung in Double-Werte können Sie mit Datums- und Zeitwerten rechnen. Bei der Addition von zwei Werten erhalten Sie absolut sinnvolle Ergebnisse. Das in Abb. 3 gezeigte Beispielformular enthält zwei Textfelder zur Dateneingabe. Der eingegebene Text wird jeweils wie oben beschrieben mit ZDate() und ZDouble() in einen Double-Wert umgerechnet. Das Textfeld txtSumme berechnet dann die Summe aus den beiden Werten. Das unterste Textfeld zeigt den berechneten Wert als Standarddatum formatiert an.

Im Beispiel wurden zu dem Datums-/Zeit-Wert 05.03.2004 23:00:00 zwei Stunden hinzuaddiert. Als Ergebnis erhalten Sie den Datums-/Zeit-Wert 06.03.2004 01:00:00.

Hinweis

Beim Rechnen mit Datums-/Zeit-Werten dürfen Sie nur positive Zahlen oder nur ganze Zahlen verwenden. Bei Datumswerten vor dem 30.12.1899 wird dem negativen ganzzahligen Anteil der positive Nachkommaanteil hinzugerechnet. Wenn Sie beispielsweise dem Datums-/Zeit-Wert 15.12.1899 23:00:00 (entspricht -15,9583333333333) zwei Stunden (entspricht 0,0833333333333333) hinzuaddieren, dann erhalten Sie das fehlerhafte Ergebnis 15.12.1899 21:00:00.

Access verfügt über eine ganze Reihe eingebauter Funktionen für die Berechnung von Datums- und Zeit-Werten. Mit der Jetzt-Funktion erhalten Sie die aktuelle Systemzeit inklusive Datum. Die Datum-Funktion liefert nur das Datum, die Jetzt-Funktion nur die Zeit.

Addieren vonZeitintervallen

Mit der DatAdd-Funktion (englisch: DateAdd) können Sie eine Sekunde (s), eine Minute (n), eine Stunde (h), einen Tag (d), einen Wochentag (w), einen Tag des Jahres (y), eine Woche (ww), einen Monat (m), ein Quartal (q) oder ein Jahr (yyyy) zu einem Datumswert hinzuaddieren. Die in Klammern angegebenen Werte können Sie als Parameter für die DateAdd-Funktion verwenden. Abbildung 4 zeigt exemplarisch das Addieren einer Woche und eines Monats zu einem Datumswert.

Abb. 4: Addition einer Woche und eines Monats zu einem Datumswert

Die in Abb. 4 gezeigten Werte können Sie mit den folgenden beiden Ausdrücken berechnen:

=DatAdd("ww";1;[txtDouble1])
=DatAdd("m";1;[txtDouble1])

Differenz in Tagen, Wochen und Monaten

Für viele Berechnungen benötigen Sie die Differenz zwischen zwei Datumswerten nicht einfach nur als Double-Zahl, sondern als konkret benanntes Intervall.

Mit der DateDiff-Funktion können Sie die Differenz zwischen zwei Zeitpunkten in Sekunden (s), Minuten (n), Stunden (h), Wochen (ww), Wochentagen (w), Tagen (d), Tagen des Jahres (y), Monaten (m), Quartalen (q) und Jahren (y) berechnen. So berechnet beispielsweise der Ausdruck

=DatDiff("d";[txtDbl1];[txtDbl2];2;2)

die Differenz zwischen zwei Datumswerten in Tagen. Der erste Parameter bezeichnet das Intervall. Das d für englisch Day veranlasst Access, die Differenz in Tagen zu berechnen. Der zweite und dritte Parameter bezeichnen zwei Steuerelemente mit Datumswerten.

Parameter Nummer vier und fünf sind optional, sollten aber im deutschsprachigen Raum angegeben werden. Diese beiden Parameter bestimmen, wie Access die Kalenderwochen zählt. Mit der ersten 2 legen Sie fest, dass der erste Tag einer Woche der Montag (2 = vbMonday) ist. Mit der zweiten 2 legen Sie fest, dass die erste Kalenderwoche eines Jahres die erste Woche mit mindestens 4 Tagen im neuen Jahr ist.

Etwas seltsam ist die Unterscheidung zwischen der Differenz in Wochentagen (w) und Wochen (ww). Falls Sie dieses Thema interessiert, sollten Sie sich den entsprechenden Text in der Hilfe genau durchlesen. Eine verständliche Interpretation des Hilfetextes könnte wie folgt lauten: Bei Verwendung des Parameters w berechnet Access die Anzahl voller Kalenderwochen mit 7 Tagen, die zwischen den beiden Datumswerten liegen.

Bei Verwendung des Parameters ww zählt Access die Anzahl der Sonntage zwischen den beiden Datumswerten. Dabei wird das zweite Datum nicht mitgezählt, sofern es auf einen Sonntag fällt. Dieser Wert ist entweder gleich oder größer als der mit w ermittelte. Wenn Sie wie in Abb. 5 beispielsweise die Wochen von Sonntag, dem 7.3.2004, bis Montag, dem 15.3.2004 mit DateDiff berechnen, dann erhalten Sie bei Verwendung des Parameters w ein Ergebnis von einer Woche und bei Verwendung des Parameters ww ein Ergebnis von zwei Wochen. Tatsächlich liegen zwischen den beiden Zeitpunkten acht Tage.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar