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 möglicherweise unerwartete Ergebnisse erhalten, 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
  • Vergleichen von Datumsdaten
  • 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.). Der Datumswert 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 Access Datums-/Uhrzeitwerte speichert:

Doppelte Zahl Datumsteil Tatsächliches Datum Zeitteil Tatsächliche 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 3:00:00 Uhr

Um anzuzeigen, wie Datums-/Uhrzeitwerte in Access als Zahlen gespeichert werden, geben Sie die folgenden Befehle in das Direktfenster ein, drücken Sie die EINGABETASTE, und sehen Sie sich dann die Ergebnisse an:

? CDbl(#5/18/1999 14:00:00#)

Ergebnis gleich: 36298.5833333333

? CDbl(#14.12.1849 17:32:00#)

Ergebnis ist gleich: -18278.73055555556

Um das Datum und die Uhrzeit numerischer Werte anzuzeigen, geben Sie im Direktfenster die folgenden Befehle ein, drücken Sie die EINGABETASTE, und sehen Sie sich dann die Ergebnisse an:

? CVDate(1.375)

Ergebnis gleich: 31.12.1899 09:00:00 Uhr

? CVDate(-304398.575)

Ergebnis gleich: 01.08.1066 13:48:00 Uhr

Formatieren eines Datums-/Uhrzeitfelds

Sie können einen Datums-/Uhrzeitwert formatieren, um ein Datum, eine Uhrzeit oder beides anzuzeigen. Wenn Sie ein reines Datumsformat verwenden, speichert Access den Wert 0 für den Zeitteil. Wenn Sie ein reines Zeitformat verwenden, speichert Access den Wert 0 für den Datumsteil.

Die folgende Tabelle zeigt, wie Access Datums-/Uhrzeitwerte speichert. Die folgende Tabelle zeigt auch, wie Sie diese Werte in verschiedenen Formaten anzeigen können:

Gespeicherter Wert (doppelte Zahl) Standardformat (Allgemeines Datum) Benutzerdefiniertes Format (mm/TT/jjjj 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 nur 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 die 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 ordnungsgemäß zu berechnen und zu formatieren:

  1. Erstellen Sie ein Modul, und geben Sie dann die folgende Zeile im Abschnitt Deklarationen ein, wenn die folgende Zeile noch nicht vorhanden ist:

    Option Explicit

  2. 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
    
  3. Geben Sie im Direktfenster die folgende Zeile ein, und drücken Sie dann die EINGABETASTE:

    ? ElapsedTime(#6/1/1999 20:23:00PM#-#6/1/1999 8:12:12AM#)

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

Vergleichen von Datumsdaten

Da Datums- und Zeitdaten als Zahlen mit doppelter Genauigkeit gemeinsam gespeichert werden, erhalten Sie beim Vergleichen von Datum/Zeitdaten eventuell unerwartete Ergebnisse. Wenn Sie beispielsweise den folgenden Ausdruck in das Direktfenster eingeben, erhalten Sie das Ergebnis False, auch wenn das heutige Datum 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, aber keinen Bruchzeitwert. Daher entspricht Now() nur dann DateValue(), wenn Now() eine Zeit von 00:00:00 (12:00:00 Uhr) 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")

  • Um den Bruchteil der Now()-Funktion zu entfernen, verwenden Sie die Funktion Int():

    ? 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 beispielsweise den folgenden Ausdruck in das Direktfenster eingeben, erhalten Sie ein ergebnis false (0), obwohl die beiden Zeitwerte identisch aussehen:

var1 = #14:01:00 PM#

var2 = DateAdd("n"; 10, var1)

? var2 = #14:11:00 PM#

Wenn Access einen Zeitwert in einen Bruch konvertiert, ist das berechnete Ergebnis möglicherweise nicht mit dem Zeitwert identisch. Die kleine Differenz, die durch die Berechnung verursacht wird, reicht aus, um ein false (0) Ergebnis zu erzeugen, 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 = #1/1/99 14:01:00 PM#

var2 = DateAdd("n"; 10, var1)

? var2 = #1/1/99 14:11:00 PM#

Konvertieren Sie die Zeitwerte in Zeichenfolgendatentypen, bevor Sie sie vergleichen:

var1 = #14:01:00 PM#

var2 = DateAdd("n"; 10, var1)

? CStr(var2) = CStr(#2:11:00 PM#)

Verwenden Sie die DateDiff()-Funktion, um genaue Einheiten wie Sekunden zu vergleichen:

var1 = #14:01:00 PM#

var2 = DateAdd("n"; 10, var1)

? DateDiff("s", var2, #14:11:00 PM#) = 0

References

Weitere Informationen zum Berechnen von Datums- und Uhrzeitwerten finden Sie unter DateSerial Function

Weitere Informationen zum Formatieren von Datums-/Uhrzeit-Datentypen finden Sie, indem Sie im Menü Hilfe auf Microsoft Access-Hilfe klicken, im Office-Assistenten oder im Antwort-Assistenten format property - date/time data type eingeben, und klicken Sie dann auf Suchen, um das Thema anzuzeigen.