Speichern, berechnen und Vergleichen von Datum/Uhrzeit-Daten in Microsoft Access

Hinweis

Office 365 ProPlus wird in Microsoft 365-Apps für Unternehmen umbenannt. Weitere Informationen zu dieser Änderung finden Sie in diesem Blogbeitrag.

Zusammenfassung

In diesem Artikel wird beschrieben, wie Microsoft Access den Datentyp Datum/Uhrzeit speichert. In diesem Artikel wird auch beschrieben, warum möglicherweise unerwartete Ergebnisse angezeigt werden, wenn Sie Datums-und Uhrzeitangaben berechnen oder Datums-und Uhrzeitangaben vergleichen.

In diesem Artikel werden die folgenden Themen beschrieben:

  • Speichern von Datum/Uhrzeit-Daten
  • Formatieren eines Felds für Datum/Uhrzeit
  • Berechnen von Zeit Daten
  • Datumsdaten vergleichen
  • Vergleichen von Zeit Daten

Weitere Informationen

Speichern von Datum/Uhrzeit-Daten

Access speichert den Datentyp Datum/Uhrzeit als eine Gleitkommazahl mit doppelter Genauigkeit bis zu 15 Dezimalstellen. Der ganzzahlige Teil der Zahl mit doppelter Genauigkeit stellt das Datum dar. Der Dezimalanteil stellt die Uhrzeit dar.

Gültige Datumswerte reichen von-657.434 (1. Januar 100 a.d.) bis 2.958.465 (31. Dezember, 9999 a.d.). Der Datumswert 0 steht für den 30. Dezember 1899. In Access werden Datumsangaben vor dem 30. Dezember 1899 als negative Zahlen gespeichert.

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, in Minuten und in Sekunden umwandeln, indem Sie den numerischen Wert mit 24 multiplizieren.

In der folgenden Tabelle wird gezeigt, wie Access Datum/Uhrzeit-Werte speichert:

Doppelte Zahl Datumsteil Aktuelles Datum Zeitabschnitt Aktuelle 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 Access Datum/Uhrzeit-Werte als Zahlen speichert, geben Sie die folgenden Befehle in das Direktfenster ein, drücken Sie die EINGABETASTE, und beachten Sie dann die Ergebnisse:

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

Ergebnis gleich: 36298.5833333333

? CDbl (#12/14/1849 17:32:00 #)

Ergebnis gleich:-18278.7305555556

Wenn Sie das Datum und die Uhrzeit numerischer Werte anzeigen möchten, geben Sie die folgenden Befehle in das Direktfenster ein, drücken Sie die EINGABETASTE, und beachten Sie dann die Ergebnisse:

? CVDate (1.375)

Ergebnis entspricht: 12/31/1899 9:00:00 Uhr

? CVDate (-304398,575)

Ergebnis entspricht: 8/1/1066 1:48:00 Uhr

Formatieren eines Felds für Datum/Uhrzeit

Sie können einen Datum/Uhrzeit-Wert so formatieren, dass ein Datum, eine Uhrzeit oder beides angezeigt wird. Wenn Sie ein nur-Datumsformat 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 Datumsbereich.

In der folgenden Tabelle wird gezeigt, wie Access Datum/Uhrzeit-Werte speichert. In der folgenden Tabelle wird auch gezeigt, wie Sie diese Werte mithilfe verschiedener Formate anzeigen können:

Gespeicherter Wert (Double number) Standardformat (allgemeines Datum) Benutzerdefiniertes Format (mm/tt/jjjj hh: NN: SS A.M./P.M.)
36295,0 5/15/99 05/15/1999 12:00:00 Uhr
0.546527777777778 1:07 Uhr 12/30/1899 01:07:00 Uhr
36232,9375 3/13/99 10:30h 03/13/1999 10:30:00 Uhr

Hinweis: Das Standardformat für einen Datum/Uhrzeit-Wert ist das allgemeine Datum. Wenn ein Wert nur von Datum ist, wird keine Uhrzeit angezeigt. Wenn der Wert nur Zeit ist, wird kein Datum angezeigt.

Berechnen von Zeit Daten

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 ordnungsgemäß 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 im Abschnitt Deklarationen die folgende Meldung ein, wenn die folgende gerade 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 die folgende Textfolge im Direktfenster ein, und drücken Sie dann die EINGABETASTE:

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

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 beispielsweise den folgenden Ausdruck im Direktfenster eingeben, erhalten Sie ein falsches Ergebnis, auch wenn das heutige Datum 3/31/1999 lautet:

? Now () = DateValue ("3/31/1999")

Die Funktion Now () gibt eine Zahl mit doppelter Genauigkeit zurück, die das aktuelle Datum und die aktuelle Uhrzeit darstellt. Die DateValue ()-Funktion gibt jedoch eine ganzzahlige Zahl zurück, die das Datum darstellt, jedoch keinen Bruchteil des Zeitwertes. Daher gibt Now () nur DateValue () zurück, 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. Zum Testen der einzelnen Funktionen geben Sie die Funktion im Direktfenster ein, ersetzen Sie das aktuelle Datum für 3/31/1999, und drücken Sie dann die EINGABETASTE:

  • Um einen ganzzahligen Wert zurückzugeben, verwenden Sie die Date ()-Funktion:

    ? Date () = DateValue ("3/31/1999")

  • Um den gebrochenen Teil der Now ()-Funktion zu entfernen, verwenden Sie die int ()-Funktion:

    ? Int (Now ()) = DateValue ("3/31/1999")

Vergleichen von Zeit Daten

Wenn Sie Zeitwerte vergleichen, erhalten Sie möglicherweise inkonsistente Ergebnisse, da ein Zeitwert als Bruch Teil einer Gleitkommazahl mit doppelter Genauigkeit gespeichert wird. Wenn Sie beispielsweise den folgenden Ausdruck im Direktfenster eingeben, erhalten Sie ein falsches Ergebnis (0), obwohl die beiden Zeitwerte gleich aussehen:

var1 = #2:01:00 Uhr #

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

? var2 = #2:11:00 Uhr #

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 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. Zum Testen der einzelnen Methoden geben Sie jede Methode in das Direktfenster ein, und drücken Sie dann die EINGABETASTE:

Hinzufügen eines verbundenen Datums zum Zeitvergleich:

var1 = #1/1/99 2:01:00 Uhr #

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

? var2 = #1/1/99 2:11:00 Uhr #

Konvertieren Sie die Zeitwerte vor dem vergleichen in String-Datentypen:

var1 = #2:01:00 Uhr #

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

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

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

var1 = #2:01:00 Uhr #

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

? DateDiff ("s", var2, #2:11:00 pm #) = 0

Informationsquellen

Weitere Informationen zum Berechnen von Datumswerten und Zeitwerten finden Sie unter DateSerial-Funktion

Weitere Informationen zum Formatieren von Datentypen für Datum/Uhrzeit erhalten Sie, wenn Sie im Menü Hilfe auf Microsoft Access Hilfe klicken, im Office-Assistenten oder im Antwort-Assistenten die Option Format Eigenschaft-Datum/Uhrzeit-Datentyp eingeben und dann auf Suchen klicken, um das Thema anzuzeigen.