Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2004.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

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.

Ein Wert mit vielen Gesichtern

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. (

Funktionen für Datum und Zeit

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 von
Zeitintervallen

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.

Wenn Sie hingegen die Differenz von Sonntag, dem 7.3.2004, und Sonntag, dem 14.3.2004, berechnen, dann ermitteln beide Parameter den gleichen Wert 1 als Ergebnis. Der Grund besteht darin, dass auch bei Verwendung von ww der zweite Sonntag nicht mitgezählt wird.

Teile ermitteln

Mit der DatTeil-Funktion (englisch: DatePart) können Sie die Jahreszahl (yyyy), das Quartal (q), den Monat (m), den Tag des Jahres (y), den Tag (d), den Wochentag (w), die Woche (ww), die Stunde (h), die Minute (n) oder die Sekunde (s) aus einem Zeitpunkt berechnen. Mit dem folgenden Ausdruck berechnen Sie beispielsweise den Tag des Jahres des im Steuerelement txtZeitpunkt gespeicherten Zeitpunkts:

Abb. 5: Berechnung mit DateDiff

=DatTeil("y";[txtZeitpunkt];2;2)

Am 8.3.2004 ist dies der Wert 68, am 31.12. des Schaltjahres 2004 ist es der Wert 366. Abb. 6 enthält eine Übersicht der verschiedenen Datumsteile.

Abb. 6: Ergebnisse der DatTeil-Funktion

Typen umwandeln

Die DatSeriell-Funktion (englisch: DateSerial) ermittelt einen Datumswert aus den in dieser Reihenfolge angegebenen Werten Jahr, Monat und Tag.

Ein Beispiel lautet:

=DatSeriell(2004;3;21)

Die korrespondierende Funktion ZeitSeriell (englisch: TimeSerial) berechnet einen Zeitwert aus Stunde, Minute und Sekunde:

=ZeitSeriell(14;39;15)

Mit der ZDate-Funktion (englisch: cdate) wandeln Sie einen Ausdruck in einen Datumswert um. Ein Beispiel für die Umwandlung einer Zeichenkette lautet wie folgt:

=ZDate("13 Juli 2003")

Dazu korrespondierend wandelt die ZeitSeriellStr-Funktion (englisch: TimeValue) einen Ausdruck in einen Zeitwert um:

=ZeitSeriellStr("14:43:20")

Mit der IstDatum-Funktion (englisch: IsDate) können Sie feststellen, ob sich ein Ausdruck in einen Datumswert umwandeln lässt.

Praxis mit Datum und Zeit

Mit den bisher beschriebenen Funktionen können Sie die meisten Aufgabenstellungen im Zusammenhang mit Datums- und Zeitwerten lösen. Die folgenden Abschnitte beschreiben die Berechnung einiger häufig benötigter Kennziffern. Sie finden alle Beispiele im Formular frmFunktionen in der Beispieldatenbank zu diesem Beitrag (s. Abb. 7).

Erster des Monats

Bei der Berechnung des ersten Tags eines Monats können Sie sich zu Nutze machen, dass Access den Tag eines Datums als ganze Zahl speichert. Von dieser Zahl brauchen Sie nur die Anzahl der in diesem Monat vergangenen Tage abzuziehen und das Ergebnis wieder in einen Datumswert umzurechnen. Mit der folgenden Formel berechnen Sie den ersten Tag des Monats auf der Basis des Datumswertes, der in dem Steuerelement txtZeitpunkt gespeichert ist:

Abb. 7: Diese Abbildung enthält eine Übersicht der häufig verwendeten Datums- und Zeitfunktionen.

=[txtZeitpunkt]-Tag([txtZeitpunkt])+1

Falls in txtZeitpunkt auch eine Uhrzeit angegeben ist, wird diese übernommen. Um die Uhrzeit abzuschneiden, können Sie folgenden Ausdruck verwenden:

=Fix([txtZeitpunkt])-Tag([txtZeitpunkt])+1

Erster Tag des Folgemonats

Zur Berechnung des ersten Tages des Folgemonats verwenden Sie die gleiche Formel wie zur Berechnung des ersten Tages innerhalb des Monats. Diesen Wert erhöhen Sie mittels der DateAdd-Funktion um einen Monat:

=DatAdd("m";1;[txtZeitpunkt]-Tag([txtZeitpunkt])+1)

1.1. des Jahres

Den 1.1. des aktuellen Jahres berechnen Sie mit der DatSeriell-Funktion.

Setzen Sie das Datum aus der Jahreszahl des in txtZeitpunkt gespeicherten Datums, dem Monat 1 und dem Tag 1 zusammen:

=DatSeriell(Jahr([txtZeitpunkt]);1;1)

Erster Tag des
Quartals

Zur Berechnung des ersten Tages im laufenden Quartal ermitteln Sie zuerst das Quartal aus dem in txtZeitpunkt enthaltenen Datumswert. Es handelt sich hierbei um einen Wert zwischen eins und vier. Von diesem Wert subtrahieren Sie den Wert eins, sodass Sie einen Wert zwischen 0 und 3 erhalten.

Mit der DatAdd-Funktion addieren Sie die Anzahl der ermittelten Quartale zum 1.1. des laufenden Jahres. Da beispielsweise der 1.1.2004 gleichzeitig auch der 1.1. des 1. Quartals ist, erhalten Sie mit der Addition von 0 bis 3 Quartalen die jeweiligen Quartalsanfänge:

=DatAdd("q";DatTeil("q";[txtZeitpunkt];2;2)-1;[txtErsterErster])

Letzter Tag des Quartals

Um letzten Tag eines Quartals zu ermitteln, berechnen Sie zuerst den 1.1. des Folgequartals. Anschließend ziehen Sie von diesem Datum einen Tag ab:

=DatAdd("q";DatTeil("q";[txtZeitpunkt];2;2);[txtErsterErster])-1

Kalenderwoche ermitteln

Der folgende Ausdruck ermittelt die Kalenderwoche des im Steuerelement txtZeitpunkt gespeicherten Datums:

=DatTeil("ww";[txtZeitpunkt])

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Flexible Datumstextfelder

© 2003-2015 André Minhorst Alle Rechte vorbehalten.