Speichern, Berechnen und Vergleichen von Datums-/Uhrzeitdaten in Microsoft Access
Zusammenfassung
In diesem Artikel wird beschrieben, wie Microsoft Access den Datentyp "Datum/Uhrzeit" speichert. In diesem Artikel wird auch beschrieben, warum Sie unerwartete Ergebnisse erhalten können, wenn Sie Datums- und Uhrzeitangaben berechnen oder Datums- und Uhrzeitangaben vergleichen.
In diesem Artikel werden die folgenden Themen beschrieben:
- Speichern von Datums-/Uhrzeitdaten
- Formatieren eines Datums-/Uhrzeitfelds
- Berechnen von Zeitdaten
- Datumsdaten vergleichen
- Vergleichen von Zeitdaten
Weitere Informationen
Speichern von Datums-/Uhrzeitdaten
Access speichert den Datentyp Datum/Uhrzeit als Gleitkommazahl mit doppelter Genauigkeit bis zu 15 Dezimalstellen. Der ganzzahlige Teil der Zahl mit doppelter Genauigkeit stellt das Datum dar. Der Dezimalteil stellt die Uhrzeit dar.
Gültige Datumswerte reichen von -657.434 (1. Januar 100 n. Chr.) bis 2.958.465 (31. Dezember 9999 n. Chr.). Ein Datumswert von 0 steht für den 30. Dezember 1899. Access speichert Datumsangaben vor dem 30. Dezember 1899 als negative Zahlen.
Gültige Zeitwerte reichen von ,0 (00:00:00) bis ,99999 (23:59:59). Der numerische Wert stellt einen Bruchteil eines Tages dar. Sie können den numerischen Wert in Stunden, Minuten und Sekunden konvertieren, indem Sie den numerischen Wert mit 24 multiplizieren.
Die folgende Tabelle zeigt, wie In Access Datums-/Uhrzeitwerte speichert:
Doppelte Zahl | Datumsteil | Ist-Datum | Zeitabschnitt | Ist-Zeit |
---|---|---|---|---|
1.0 | 1 | 31. Dezember 1899 | ,0 | 12:00:00 |
2,5 | 2 | 1. Januar 1900 | ,5 | 24:00:00 |
27468,96875 | 27468 | 15. März 1975 | ,96875 | 23:15:00 |
36836.125 | 36836 | 6. November 2000 | .125 | 03:00:00 Uhr |
Wenn Sie anzeigen möchten, wie In Access Datums-/Uhrzeitwerte als Zahlen speichert, geben Sie die folgenden Befehle in das Direktfenster ein, drücken Sie die EINGABETASTE, und beachten Sie dann die Ergebnisse:
? CDbl(#18.05.1999 14:00:00#)
Ergebnis entspricht: 36298.5833333333
? CDbl(#14.12.1849 17:32:00#)
Ergebnis entspricht: -18278.7305555556
Um das Datum und die Uhrzeit numerischer Werte anzuzeigen, geben Sie im Direktfenster die folgenden Befehle ein, drücken Sie die EINGABETASTE, und beachten Sie dann die Ergebnisse:
? CVDate(1.375)
Ergebnis entspricht: 31.12.1899 9:00:00 Uhr
? CVDate(-304398.575)
Ergebnis entspricht: 01.08.1066 13:48:00 Uhr
Formatieren eines Datums-/Uhrzeitfelds
Sie können einen Datums-/Uhrzeitwert so formatieren, dass ein Datum, eine Uhrzeit oder beides angezeigt wird. Wenn Sie ein Nur-Datum-Format verwenden, speichert Access den Wert 0 für den Zeitbereich. Wenn Sie ein Nur-Zeit-Format verwenden, speichert Access den Wert 0 für den Datumsteil.
Die folgende Tabelle zeigt, wie In Access Datums-/Uhrzeitwerte speichert. Die folgende Tabelle zeigt auch, wie Sie diese Werte mithilfe verschiedener Formate anzeigen können:
Gespeicherter Wert (doppelte Zahl) | Standardformat (Allgemeines Datum) | Benutzerdefiniertes Format (mm/dd/yyyy hh:nn:ss A.M./P.M.) |
---|---|---|
36295.0 | 5/15/99 | 15.05.1999 12:00:00 Uhr |
0.546527777777778 | 13:07 Uhr | 30.12.1899 13:07:00 Uhr |
36232.9375 | 3/13/99 | 22:30 UHR 13.03.1999 22:30:00 Uhr |
Hinweis Das Standardformat für einen Datums-/Uhrzeitwert ist "Allgemeines Datum". Wenn ein Wert nur datumsgeschützt ist, wird keine Uhrzeit angezeigt. Wenn der Wert zeitgeschützt ist, wird kein Datum angezeigt.
Berechnen von Zeitdaten
Da ein Zeitwert als Bruchteil eines 24-Stunden-Tages gespeichert wird, erhalten Sie eventuell beim Berechnen von Zeitintervallen, die 24 Stunden überschreiten, fehlerhafte Formatierungsergebnisse. Um dieses Verhalten zu umgehen, können Sie eine benutzerdefinierte Funktion erstellen, um sicherzustellen, dass Zeitintervalle richtig formatiert sind.
Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionsfähigkeit sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen. Die Microsoft Support-Spezialisten können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden sie diese Beispiele nicht in Bezug auf eine erweiterte Funktionalität verändern, noch werden sie Prozeduren entwickeln, die auf Ihre besonderen Bedürfnisse zugeschnitten sind. Führen Sie die folgenden Schritte aus, um Zeitintervalle korrekt zu berechnen und zu formatieren:
Erstellen Sie ein Modul, und geben Sie dann die folgende Zeile im Deklarationsbereich ein, wenn die folgende Zeile noch nicht vorhanden ist:
Option Explicit
Geben Sie das folgende Verfahren ein:
'------------------------------------------------------------------ ' This function calculates the elapsed time between two values and then ' formats the result in four different ways. ' ' The function accepts interval arguments such as the following: ' ' #5/12/95 6:00:00AM# - #5/11/95 10:00:00PM# ' ' ' ' [End Time]-[Start Time] '------------------------------------------------------------------ Function ElapsedTime (Interval) Dim x x = Int(CSng(Interval * 24 * 3600)) & " Seconds" Debug.Print x x = Int(CSng(Interval * 24 * 60)) & ":" & Format(Interval, "ss") _ & " Minutes:Seconds" Debug.Print x x = Int(CSng(Interval * 24)) & ":" & Format(Interval, "nn:ss") _ & " Hours:Minutes:Seconds" Debug.Print x x = Int(CSng(Interval)) & " days " & Format(Interval, "hh") _ & " Hours " & Format(Interval, "nn") & " Minutes " & _ Format(Interval, "ss") & " Seconds" Debug.Print x End Function
Geben Sie im Direktfenster die folgende Zeile ein, und drücken Sie dann die EINGABETASTE:
? ElapsedTime(#01.06.1999 20:23:00#-#01.06.1999 8:12:12#)
Beachten Sie, dass die folgenden Werte angezeigt werden:
43848 Seconds
730:48 Minutes:Seconds
12:10:48 Hours:Minutes:Seconds
0 days 12 Hours 10 Minutes 48 Seconds
Datumsdaten vergleichen
Da Datums- und Zeitdaten als Zahlen mit doppelter Genauigkeit gemeinsam gespeichert werden, erhalten Sie beim Vergleichen von Datum/Zeitdaten eventuell unerwartete Ergebnisse. Wenn Sie z. B. den folgenden Ausdruck im Direktfenster eingeben, erhalten Sie auch dann ein "False"-Ergebnis, wenn das heutige Datum der 31.03.1999 ist:
? Now()=DateValue("31.03.1999")
Die Now()-Funktion gibt eine Zahl mit doppelter Genauigkeit zurück, die das aktuelle Datum und die aktuelle Uhrzeit darstellt. Die DateValue()-Funktion gibt jedoch eine ganze Zahl zurück, die das Datum darstellt, jedoch keinen Zeitbruchwert. Daher ist "Now()" nur dann gleich "DateValue()", wenn Now() eine Uhrzeit von 00:00:00 (12:00:00 A.M.) zurückgibt.
Um beim Vergleichen von Datumswerten genaue Ergebnisse zu erzielen, verwenden Sie eine der folgenden Funktionen. Um jede Funktion zu testen, geben Sie die Funktion im Direktfenster ein, ersetzen Sie das aktuelle Datum durch den 31.03.1999, und drücken Sie dann die EINGABETASTE:
Verwenden Sie die Date()-Funktion, um einen ganzzahligen Wert zurückzugeben:
? Date()=DateValue("31.03.1999")
Verwenden Sie die Int()-Funktion, um den Bruchteil der Now()-Funktion zu entfernen:
? Int(Now())=DateValue("31.03.1999")
Vergleichen von Zeitdaten
Wenn Sie Zeitwerte vergleichen, erhalten Sie möglicherweise inkonsistente Ergebnisse, da ein Zeitwert als Bruchteil einer Gleitkommazahl mit doppelter Genauigkeit gespeichert wird. Wenn Sie z. B. den folgenden Ausdruck im Direktfenster eingeben, erhalten Sie ein falsches Ergebnis (0), obwohl die beiden Zeitwerte gleich aussehen:
var1 = #14:01:00 #
var2 = DateAdd("n", 10, var1)
? var2 = #14:11:00 #
Wenn Access einen Zeitwert in einen Bruch konvertiert, ist das berechnete Ergebnis möglicherweise nicht identisch mit dem Zeitwert. Der kleine Unterschied, der durch die Berechnung verursacht wird, reicht aus, um ein falsches Ergebnis (0) zu erzielen, wenn Sie einen gespeicherten Wert mit einem konstanten Wert vergleichen.
Wenn Sie beim Vergleichen von Zeitwerten genaue Ergebnisse erzielen möchten, verwenden Sie eine der folgenden Methoden. Um jede Methode zu testen, geben Sie jede Methode im Direktfenster ein, und drücken Sie dann die EINGABETASTE:
Hinzufügen eines verbundenen Datums zum Zeitvergleich:
var1 = #01.01.99 14:01:00 #
var2 = DateAdd("n", 10, var1)
? var2 = #01.01.99 14:11:00 #
Konvertieren Sie die Zeitwerte in Zeichenfolgendatentypen, bevor Sie sie vergleichen:
var1 = #14:01:00 #
var2 = DateAdd("n", 10, var1)
? CStr(var2) = CStr(#14:11:00#)
Verwenden Sie die DateDiff()-Funktion, um genaue Einheiten wie Sekunden zu vergleichen:
var1 = #14:01:00 #
var2 = DateAdd("n", 10, var1)
? DateDiff("s", var2, #14:11:00#) = 0
References
Weitere Informationen zum Berechnen von Datums- und Uhrzeitwerten finden Sie unter DateSerial Function
Weitere Informationen zum Formatieren von Datums-/Uhrzeit-Datentypen erhalten Sie, indem Sie im Menü "Hilfe" auf "Microsoft Access-Hilfe" klicken, "Formateigenschaft – Datum/Uhrzeit"-Datentyp im Office-Assistenten oder im Antwort-Assistenten eingeben und dann auf "Suchen" klicken, um das Thema anzuzeigen.