Artikel-ID: 130514 - Geändert am: Mittwoch, 11. Oktober 2006 - Version: 2.3

Speichern, Berechnen, Vergleichen von Daten des Typs Datum/Zeit

Dieser Artikel wurde zuvor veröffentlicht unter D37374
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
130514  (http://support.microsoft.com/kb/130514/EN-US/ ) ACC: Storing, Calculating, and Comparing Date/Time Data
Alles erweitern | Alles schließen

Zusammenfassung

!!!
Die in diesem Artikel wiedergegebenen Informationen stellen den aktuellen Wissenstand von Microsoft zum Zeitpunkt des Uploads des Artikels in die Microsoft Website dar. Dieser kann sich bis zum heutigen Tage verändert haben. Wir empfehlen Ihnen daher dringend, sich im eigenen Interesse durch regelmäßigen Zugriff auf die Microsoft-Jahr 2000-Website unter http://microsoft.com/germany/jahr2000 über den aktuellsten Stand der Jahr 2000-Kategorisierung Ihres Microsoft-Produktes zu informieren. Die Microsoft-Jahr 2000-Website enthält stets die aktuellsten Informationen von Microsoft zum Jahr 2000-Problem.
!!!

Zusammenfassung

Schwierigkeitsgrad: Erfordert Grundkenntnisse in den Bereichen Makros, Codierung und Interoperabilität.

In diesem Artikel wird erklärt, wie Microsoft Access den Datentyp Datum/Uhrzeit speichert und warum Sie möglicherweise unerwartete Ergebnisse erhalten, wenn Sie Daten und Uhrzeiten berechnen oder vergleichen.

In diesem Artikel werden die folgenden Themen angesprochen:
  • Speichern des Datentyps Datum/Uhrzeit
  • Formatieren des Feldes Datum/Uhrzeit
  • Berechnen von Uhrzeitdaten
  • Vergleichen von Datumsdaten
  • Vergleichen von Uhrzeitdaten

Weitere Informationen

Speichern des Datentyps Datum/Uhrzeit:

Microsoft Access speichert den Datentyp Datum/Uhrzeit als doppelstellige Zahl mit Gleitkomma (bis zu 15 Dezimalstellen). Der ganzzahlige Teil der doppelstelligen Zahl steht für das Datum und die Dezimalstellen repräsentieren die Uhrzeit.

Der Bereich für gültige Datumswerte reicht von -647,434 (1. Januar 100 A.D.) bis 2,958,465 (31. Dezember 9999 A.D.). Ein Datumswert von 0 steht für den 30. Dezember 1899. Microsoft Access speichert ein Datum, das vor dem 30. Dezember 1899 liegt, als negative Zahl.

Der Bereich für gültige Uhrzeitwerte reicht von .0 (00:00:00) bis .99999 (23:59:59). Der numerische Wert repräsentiert einen Bruchteil eines Tages. Sie können diesen numerischen Wert in Stunden, Minuten und Sekunden umrechnen, indem Sie ihn mit 24 multiplizieren.

Die folgende Tabelle illustriert, wie Microsoft Access Werte des Typs Datum/Uhrzeit speichert:
   Doppel-         Datums-      Tatsächliches             Uhrzeit-    Tats.
   zahl            teil         Datum                     teil        Uhrzeit
  1. 1
  2. Dezember 1899 .0 12:00:00 A.M.
       2.5             2            1. Januar 1900            .5          12:00:00P.M.
       27468.96875     27468        15.März 1975              .96875      11:15:00 P.M.
       33914.125       33914        6. November 1992          .125        3:00:00 A.M.
Um einzusehen, wie Microsoft Access Werte für Datum/Uhrzeit als Zahlen speichert, geben Sie die folgenden Befehle in das Testfenster in Microsoft Access 97 und 7.0 ein (oder in das "Direktfenster" in Microsoft Access 2.0 oder früher) und notieren Sie sich die Ergebnisse:
   ? CDbl(#5/18/87 14:00:00#)
   31915.5833333333
? CDbl(#12/14/1849 17:32:00#)
   -18278.7305555556
Um für numerische Werte das entsprechende Datum bzw. die Uhrzeit einzusehen, geben Sie die folgenden Befehle in das Testfenster ein (oder in das "Direktfenster") und notieren Sie sich die Ergebnisse:
   ? CVDate(1.375)
   12/31/1899 9:00:00 AM
? CVDate(-304398.575)
   8/1/1066 1:48:00 PM
Formatieren des Feldes Datum/Uhrzeit:

Sie können einen Wert Datum/Uhrzeit so formatieren, daß ein Datum, eine Uhrzeit oder beides angezeigt wird. Wenn Sie das Format "Nur Datum" verwenden, speichert Microsoft Access den Wert 0 für den Uhrzeitteil. Wenn Sie das Format "Nur Uhrzeit" verwenden, speichert Microsoft Access den Wert 0 für den Datumsteil.

Die folgende Tabelle illustriert, wie Microsoft Access Werte für Datum/Uhrzeit speichert und wie Sie diese Werte in verschiedenen Formaten anzeigen lassen können:
   Gespeicherter Wert         Standardformat      Benutzerdefiniertes Format
   (Doppelzahl)               (Standarddatum)     (MM/TT/JJJJ SS:MM:SS AM/PM)
34834.0 5/15/95 05/15/1995 12:00:00 A.M.
  1. 46527777777778 1:07 PM 12/30/1899 01:07:00 P.M.
       34041.9375                 3/13/93 10:30PM     03/13/1993 10:30:00 P.M.
HINWEIS: Das Standardformat für den Wert Datum/Uhrzeit ist "Standarddatum". Bei einem Wert im Format "Nur Datum" wird keine Uhrzeit angezeigt. Bei einem Wert im Format "Nur Uhrzeit" wird kein Datum angezeigt.

Berechnen von Uhrzeitdaten:

Da der Wert für die Uhrzeit als Bruchteil eines 24-Stunden-Tages gespeichert wird, erhalten Sie möglicherweise inkorrekte Formatierungsergebnisse, wenn Sie Zeitintervalle von mehr als 24 Stunden berechnen. Um dieses Problem zu umgehen, können Sie eine benutzerdefinierte Funktion erstellen, um zu gewährleisten, daß Zeitintervalle korrekt formatiert werden.

In diesem Artikel wird davon ausgegangen, daß Sie mit Visual Basic for Applications sowie mit dem Erstellen von Microsoft Access-Anwendungen mit Hilfe der Programmierungstools von Microsoft Access vertraut sind. Für weitere Informationen über Visual Basic for Applications lesen Sie bitte Ihre Version des Handbuchs "Building Applications with Microsoft Access" (Erstellen von Anwendungen mit Microsoft Access).

HINWEIS: Visual Basic for Applications wird in den Microsoft Access-Versionen 1.x und 2.0 als "Access Basic" bezeichnet. Für weitere Informationen zu Access Basic siehe das Handbuch "Introduction to Programming" (Einführung in die Programmierung) in Microsoft Access 1.x bzw. "Building Applications" (Erstellen von Anwendungen) in Microsoft Access 2.0.

Um Zeitintervalle korrekt zu berechnen und zu formatieren, führen Sie die folgenden Schritte durch:
  1. Erstellen Sie ein Modul und geben Sie die nachstehende Zeile in den Deklarationsbereich ein, falls sie dort nicht schon vorhanden ist: Option Explicit
  2. Geben Sie die folgende Prozedur ein.
HINWEIS: In dem folgenden Beispielcode wird ein Unterstrich (_) am Ende einer Zeile dazu verwendet, um darauf hinzuweisen, daß die Zeile fortgesetzt wird. Löschen Sie den Unterstrich am Ende der Zeile, wenn Sie diesen Code in Access Basic reproduzieren.
   '------------------------------------------------------------------------------- 
   ' Diese Funktion berechnet die zwischen zwei Werten vergangene Zeit
   ' und formatiert das Ergebnis auf vier verschiedene Arten. Die Funktion
   ' akzeptiert Intervallargumente wie z.B. die folgenden: ' ' #5/12/95 6:00:00AM# 
   ' - #5/11/95 10:00:00PM# -oder- [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
  1. Geben Sie die nachstehende Zeile in das Testfenster ein (oder in das "Direktfenster") und drücken Sie dann ENTER:
       ? ElapsedTime(#6/1/93 8:23:00PM#-#6/1/93 8:12:12AM#)
Es werden die folgenden Werte angezeigt: 43848 Sekunden 730:48 Minuten:Sekunden 12:10:48 Stunden:Minuten:Sekunden 0 Tage 12 Stunden 10 Minuten 48 Sekunden

Vergleichen von Datumsdaten:

Da Datums- und Uhrzeitangaben zusammen als doppelstellige Zahlen gespeichert werden, erhalten Sie möglicherweise unerwartete Ergebnisse, wenn Sie Datums/Uhrzeit-Daten vergleichen. Wenn Sie beispielsweise den folgenden Ausdruck in das Testfenster (oder in das "Direktfenster") eingeben, erhalten Sie das falsche Ergebnis (0), obwohl das heutige Datum der 31.03.95 (3/31/95) ist:
   ? Now()=DateValue("3/31/95")
Die Funktion Jetzt() [Now()] ergibt eine doppelstellige Zahl, die das aktuelle Datum und die aktuelle Uhrzeit repräsentiert. Die Funktion DatWert() [DateValue()]liefert jedoch eine ganze Zahl, die zwar das Datum, nicht jedoch einen Bruchteilwert für die Uhrzeit repräsentiert. Daraus folgt, daß Jetzt() nur dann gleich DatWert() ist, wenn Jetzt() den Wert 00:00:00 (12:00:00) für die Uhrzeit liefert.

Um beim Vergleich von Datumswerten exakte Ergebnisse zu erhalten, verwenden Sie eine der nachstehenden Funktionen. Um diese Funktionen zu testen, geben Sie diese in das Testfenster ein (oder in das "Direktfenster"), ersetzen Sie 3/31/95 durch das aktuelle Datum und drücken Sie dann ENTER:
  • Um einen ganzzahligen Wert zu erhalten, verwenden Sie die Funktion Datum(): [Date()]:?Date()=DateValue("3/31/95")
  • Um den aus Brüchen bestehenden Teil der Funktion Now() zu eliminieren, verwenden Sie die Funktion Int(): ?Int(Now())=DateValue("3/31/95")
Vergleichen von Uhrzeitdaten (in Microsoft Access 2.0):

Wenn Sie Uhrzeitwerte vergleichen, erhalten Sie möglicherweise inkonsistente Ergebnisse, weil ein Uhrzeitwert als Bruchteil einer doppelstelligen Zahl mit Gleitkomma gespeichert wird. Wenn Sie beispielsweise den folgenden Ausdruck in das "Direktfenster" eingeben, erhalten Sie das falsche Ergebnis (0), obwohl die beiden Uhrzeitwerte gleich aussehen:

HINWEIS: Dieses Verhalten tritt in Microsoft Access 7.0 oder 97 nicht mehr auf.
   var1 = #2:00:00 PM#
   var2 = DateAdd("n", 10, var1)
   ? var2 = #2:10:00 PM#
Wenn Microsoft Access einen Uhrzeitwert in einen Bruch umwandelt, entspricht das errechnete Ergebnis möglicherweise nicht exakt dem Uhrzeitwert. Die geringe Differenz, die beim Rechenvorgang entsteht, reicht aus, um zu dem falschen Ergebnis (0) zu führen, wenn Sie einen gespeicherten Wert mit einem konstanten Wert vergleichen.

Um beim Vergleich von Uhrzeitwerten exakte Ergebnisse zu erhalten, wenden Sie eines der nachstehenden Verfahren an. Um diese Funktionen zu testen, geben Sie diese in das "Direktfenster" ein und drücken Sie dann ENTER:
  • Fügen Sie dem Uhrzeitvergleich ein verbundenes Datum hinzu: var1 = #1/1/90 2:00:00 PM# var2 = DateAdd("n", 10, var1) ? var2 = #1/1/90 2:10:00 PM#
  • Konvertieren Sie die Uhrzeitwerte vor dem Vergleich in Zeichenfolgen: var1 = #2:00:00 PM# var2 = DateAdd("n", 10, var1) ? CStr(var2) = CStr(#2:10:00 PM#)
  • Verwenden Sie die Funktion DatDiff() [DateDiff()], um präzise Einheiten, wie z.B. Sekunden, zu vergleichen: var1 = #2:00:00 PM# var2 = DateAdd("n", 10, var1) ? DateDiff("s", var2, #2:10:00 PM#) = 0
WEITERE HINWEISE:
Für weitere Informationen zum Berechnen von Uhrzeitwerten lesen Sie bitte den folgenden Artikel in der Microsoft Knowledge Base:
   ARTIKEL-ID: D37396
   TITEL     : Funktionen zum Berechnen und Anzeigen von Datum-/Zeitwerten
Weitere Suchbegriffe: Y2K, Millenium, Year2000

Für weitere Informationen zum Formatieren von Daten des Typs Datum/Uhrzeit geben Sie "Datumsformatierung" in den Office-Assistenten ein, klicken Sie auf SUCHEN und klicken Sie dann das Thema über Formateigenschaften und den Datentyp Datum/Uhrzeit an, um es einzusehen.

Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, daß nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Access 1.0 Standard Edition
  • Microsoft Access 1.1 Standard Edition
  • Microsoft Access 2.0 Standard Edition
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
Keywords: 
kbprogramming KB130514
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Retired KB ArticleDisclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.
 

SPRACHE AUSWÄHLEN