Artikel-ID: 210604 - Geändert am: Mittwoch, 30. Mai 2007 - Version: 5.1

Funktionen zur Berechnung und Anzeige von Datum/Uhrzeit

Dieser Artikel wurde zuvor veröffentlicht unter D38899
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
210604  (http://support.microsoft.com/kb/210604/EN-US/ ) Functions for calculating and for displaying Date/Time values in Access
Moderat: Erfordert grundlegende Kenntnisse in den Bereichen Makros, Codierung und Interoperabilität.

Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass 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.

Auf dieser Seite

Alles erweitern | Alles schließen

Zusammenfassung

Da ein Datum/Zeit-Wert als Zahl mit doppelter Genauigkeit gespeichert wird, können Sie falsche Formatierungsergebnisse erhalten, wenn Sie versuchen, den Datum/Zeit-Wert in einem Ausdruck zu verändern. Dieser Artikel zeigt, wie Sie Ausdrücke und benutzerdefinierte Funktionen zum Anzeigen spezieller Datumswerte und zum Berechnen von Zeitintervallen erstellen.

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 Funktionalität sowie ohne Anspruch auf Support zur Verfügung. In diesem Artikel wird vorausgesetzt, dass Sie mit der in den Beispielen verwendeten Programmiersprache und mit den zum Erstellen und Debuggen von Prozeduren verwendeten Tools vertraut sind. Die Spezialisten von Microsoft Support Services 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.

Weitere Informationen

Anzeige bestimmter Datumswerte

Um bestimmte Datumswerte anzuzeigen, können Sie die Funktion DatSeriell() (DateSerial()) benutzen, um den Tag-, Monat- und Jahresteil eines Datums zu verändern. Zum Beispiel können Sie die folgenden Ausdrücke in der Eigenschaft Steuerelementinhalt eines Textfeldes oder im Direktfenster benutzen, um ein bestimmtes Datum anzuzeigen:
  • Der aktuelle Monat:
    DatSeriell(Jahr(Datum()); Monat(Datum());1)
  • Der nächste Monat:
    DatSeriell(Jahr(Datum());Monat(Datum())+1;1)
  • Der letzte Tag des aktuellen Monats:
    DatSeriell(Jahr(Datum());Monat(Datum())+1;0)
  • Der letzte Tag des nächsten Monats:
    DatSeriell(Jahr(Datum());Monat(Datum())2;0)
  • Der erste Tag des vorhergehenden Monats:
    DatSeriell(Jahr(Datum()); Monat(Datum())-1,1)
  • Der letzte Tag des vorhergehenden Monats:
    DatSeriell(Jahr(Datum()); Monat(Datum()),0)
  • Der erste Tag des aktuellen Quartals:
    DatSeriell(Jahr(Datum()); Int(Monat(Datum()) - 1) / 3) * 3 + 1, 1)
  • Der letzte Tag des aktuellen Quartals:
    DatSeriell(Jahr(Datum()); Int(Monat(Datum()) - 1) / 3) * 3 + 4, 0)
  • Der erste Tag der aktuellen Woche (vorausgesetzt Sonntag = Tag 1):
    Datum()-Wochentag(Datum())1
  • der letzte Tag der aktuellen Woche:
    Datum()-Wochentag(Datum())+7
  • Der erste Tag der aktuellen Woche (unter Benutzung der Einstellungen im Dialogfeld "Optionen"):
    Datum()-Wochentag(Datum();0)1
  • der letzte Tag der aktuellen Woche:
    Datum()-Wochentag(Datum();0)+7
Weitere Informationen zur Berechnung des Geschäftsjahres oder des Geschäftsmonats finden Sie im folgenden Artikel der Microsoft Knowledge Base:
210249  (http://support.microsoft.com/kb/210249/DE/ ) Welcher VERFAHRENSWEISE: TO: Sie rufen das Geschäftsjahr oder den Monat eines bestimmten Datums in Access 2000 ab
Achtung: Die folgenden Schritte in diesem Beispiel werden die Beispieldatenbank "Nordwind.mdb" verändern. Sie sollten ein Backup der Datei "Nordwind.mdb" erstellen und die Schritte in einer Kopie der Datenbank ausführen.

Berechnung von Zeitintervallen

Da ein Zeitwert als ein Bruchteil eines 24-Stunden-Tages gespeichert wird, erhalten Sie möglicherweise unkorrekte Formatergebnisse, wenn Sie versuchen, Zeitdaten, die größer als 24 Stunden sind, zu addieren, zu subtrahieren, zu multiplizieren oder zu dividieren.

Wenn Sie beispielsweise versuchen, die Anzahl von Stunden herauszufinden, die zwischen zwei Daten abgelaufen sind, indem Sie die Werte in Visual Basic subtrahieren, erhalten Sie möglicherweise eine falsche Zahl. Um dies zu zeigen, geben Sie den folgenden Code in das Direktfenster ein, und Sie erhalten statt des korrekten Wertes von 53:00 Stunden nur 00:00:00 Stunden als Ergebnis:
   StartDate=#6/1/93 8:00AM#
   EndDate=#6/3/93 1:00PM#
   ?Format(EndDate-StartDate,"hh:mm")

Um Formatprobleme zu beheben, die durch Zeitwerte über 24 Stunden verursacht werden, können Sie die Funktionen Int() und CSng() in Visual Basic verwenden, um einen berechneten Zeitwert in verschiedene Variablen für Tage, Stunden, Minuten und Sekunden aufzuteilen. Sie können beispielsweise das folgende Codefragment in eine benutzerdefinierte Funktion einfügen, um separate Zeitvariablen zu erstellen:
 '-------------------------------------------------------------------
 ' This sample code separates a time interval into seven variables for
 ' the following values: days, hours, minutes, seconds, total time in
 ' hours, total time in minutes, and total time in seconds.
 '
 ' The interval argument is flexible; it can be a single value, an
 ' expression, or a field reference.
 '-------------------------------------------------------------------

 Dim totalhours As Long, totalminutes As Long, totalseconds As Long
 Dim days As Long, hours As Long, minutes As Long, seconds As Long
 Dim interval As Variant

 days = Int(CSng(interval))
 totalhours = Int(CSng(interval * 24))
 totalminutes = Int(CSng(interval * 1440))
 totalseconds = Int(CSng(interval * 86400))
 hours = totalhours Mod 24
 minutes = totalminutes Mod 60
 seconds = totalseconds Mod 60

Sie können die Variablen "totalhours", "totalminutes" und "totalseconds" verwenden, um einen Zeitwert als einzelne Zeiteinheit anzuzeigen. Mit den Variablen "Tage", "Stunden", "Minuten" und "Sekunden" können Sie einen Zeitwert in Zeitfragmente aufteilen. Um Zeitwerte in verschiedenen Formaten anzuzeigen, können Sie diese Variablen, wie in den folgenden Beispielfunktionen demonstriert, verketten:
  • Die Funktion GetElapsedDays() berechnet die abgelaufene Zeit zwischen zwei Datum-/Zeitwerten und zeigt das Ergebnis in Tagen an.
  • Die Funktion GetElapsedTime() berechnet die abgelaufene Zeit zwischen Zeitwerten und zeigt das Ergebnis in Tagen, Stunden, Minuten und Sekunden an.
  • Die Funktion GetTimeCardTotal() summiert ein Feld mit Zeitwerten in einer Tabelle und zeigt die Gesamtzeit in Stunden und Minuten an.

Beispielfunktion "GetElapsedDays()"

Gehen Sie folgendermaßen vor, um die Funktion GetElapsedDays() zu erstellen:
  1. Öffnen Sie die Beispieldatenbank "Nordwind.mdb".
  2. Erstellen Sie ein Modul und geben Sie die folgende Zeile im Deklarationsbereich ein, falls sie dort nicht bereits vorhanden ist:
     Option Explicit
  3. Geben Sie die folgende Funktion ein:
     Function GetElapsedDays (interval)
        Dim days As Long
    
        days = Int(CSng(interval))
        GetElapsedDays = days & " Days "
     End Function
  4. Um diese Funktion zu testen, erstellen Sie eine neue Abfrage basierend auf der Tabelle "Bestellungen".
  5. Fügen Sie im QBE-Raster die folgenden Felder hinzu.
        Feld: Versanddatum
        Anzeigen: Ja
    
        Feld: Bestelldatum
        Anzeigen: Ja
    
        Feld: ElapsedTime: GetElapsedDays([Versanddatum]-[Bestelldatum])
        Anzeigen: Ja
  6. Führen Sie die Abfrage aus. Beachten Sie, dass die Spalte "ElapsedTime" die Anzahl der Tage zwischen dem Feld "Versanddatum" und dem Feld "Bestelldatum" für jeden Datensatz in der Tabelle "Bestellungen" anzeigt.

Beispielfunktion "GetElapsedTime()"

Gehen Sie folgendermaßen vor, um die Funktion GetElapsedTime() zu erstellen:
  1. Erstellen Sie eine neue Tabelle mit der folgenden Struktur und speichern Sie sie als "TimeLog".
        Tabelle: TimeLog
        -----------------------
        Feldname: Anfangszeit
        Datentyp: Datum/Uhrzeit
        Format: Standarddatum
    
        Feldname: Endzeit
        Datentyp: Datum/Uhrzeit
        Format: Standarddatum
  2. Zeigen Sie die "TimeLog"-Tabelle in der Datenblattansicht an, geben Sie die folgenden drei Datensätze ein und schließen Sie anschließend die Tabelle:
        Anfangszeit              Endzeit
        --------------------------------------------
        5/10/95 4:57:00  PM       5/15/95 2:38:00 AM
        5/11/95 10:17:31 AM       5/24/95 6:05:00 PM
        5/18/95 9:16:43  AM       5/19/95 5:03:00 PM
  3. Erstellen Sie ein Modul und geben Sie die folgende Zeile in den Deklarationsbereich ein:
     Option Explicit
  4. Geben Sie die folgende Funktion ein:
     Function GetElapsedTime(interval)
    
     Dim totalhours As Long, totalminutes As Long, totalseconds As _
         Long
     Dim days As Long, hours As Long, Minutes As Long, Seconds As Long
    
     days = Int(CSng(interval))
     totalhours = Int(CSng(interval * 24))
     totalminutes = Int(CSng(interval * 1440))
     totalseconds = Int(CSng(interval * 86400))
     hours = totalhours Mod 24
     Minutes = totalminutes Mod 60
     Seconds = totalseconds Mod 60
    
     GetElapsedTime = days & " Days " & hours & " Hours " & Minutes & _
     " Minutes " & Seconds & " Seconds "
    
     End Function

    Hinweis: Bei der Funktion GetElapsedTime müssen ein Datum und eine Uhrzeit eingegeben werden.
  5. Um diese Funktion zu testen, erstellen Sie mit dem AutoBericht-Assistenten einen neuen Bericht auf Basis der Tabelle TimeLog.
  6. Zeigen Sie den Bericht in der Entwurfsansicht an.
  7. Fügen Sie ein ungebundenes Textfeld zum Detailbereich der Tabelle "TimeLog" hinzu, und stellen Sie die Eigenschaften folgendermaßen ein:
        Textfeld
        ---------------
        Name: ElapsedTime
        Steuerelementinhalt: =GetElapsedTime([Endzeit]-[Anfangszeit])
        Breite: 7,5 cm
  8. Öffnen Sie die Berichtsvorschau. Beachten Sie, dass jeder Datensatz die abgelaufene Gesamtzeit in Tagen, Stunden, Minuten und Sekunden anzeigt.

Beispielfunktion "GetTimeCardTotal()"

Gehen Sie folgendermaßen vor, um die Funktion GetTimeCardTotal() zu erstellen:

Hinweis: Der Beispielcode in diesem Artikel verwendet Microsoft-Datenzugriffsobjekte (Data Access Objects = DAO). Damit dieser Code ordnungsgemäß ausgeführt wird, müssen Sie einen Verweis auf die Microsoft DAO 3.6-Objektbibliothek anlegen. Klicken Sie hierzu im Menü Extras des Visual Basic-Editors auf Verweise, und stellen Sie sicher, dass das Kontrollkästchen für die Microsoft DAO 3.6-Objektbibliothek aktiviert ist.

  1. Erstellen Sie eine neue Tabelle mit der folgenden Struktur, und speichern Sie sie als "TimeCard".
        Tabelle: TimeCard
        -----------------------
        Feldname: Daily Hours
        Datentyp: Datum/Uhrzeit
        Format: Zeit, 24Std.
  2. Zeigen Sie die "TimeCard"-Tabelle in der Datenblattansicht an, geben Sie die folgenden vier Datensätze ein und schließen Sie anschließend die Tabelle:
        8:15
        7:37
        8:12
        8:03
  3. Erstellen Sie ein Modul, und geben Sie die folgende Zeile in den Deklarationsbereich ein, falls sie nicht bereits vorhanden ist:
     Option Explicit
  4. Geben Sie die folgende Funktion ein:
     Function GetTimeCardTotal ()
    
     Dim db As DAO.Database, rs As DAO.Recordset
     Dim totalhours As Long, totalminutes As Long
     Dim days As Long, hours As Long, minutes As Long
     Dim interval As Variant, j As Integer
    
     Set db = dbengine.workspaces(0).databases(0)
     Set rs = db.OpenRecordset("timecard")
     interval = #12:00:00 AM#
        While Not rs.EOF
           interval = interval + rs![Daily hours]
           rs.MoveNext
        Wend
     totalhours = Int(CSng(interval * 24))
     totalminutes = Int(CSng(interval * 1440))
     hours = totalhours Mod 24
     minutes = totalminutes Mod 60
    
     GetTimeCardTotal = totalhours & " hours and " & minutes & " minutes"
    
     End Function
  5. Um diese Funktion zu testen, geben Sie die folgende Zeile in das Direktfenster ein, und drücken Sie anschließend die [EINGABETASTE]:
     ?GetTimeCardTotal()

    Beachten Sie, dass das Direktfenster 32 Stunden und 7 Minuten anzeigt.

Informationsquellen

Weitere Informationen zur Berechnung von Datum-/Zeitwerten finden Sie im folgenden Artikel der Microsoft Knowledge Base:
210276  (http://support.microsoft.com/kb/210276/DE/ ) Speichern, Berechnen und Vergleichen von Datum/Uhrzeit-Daten in Microsoft Access

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
Keywords: 
kbhowto kbprogramming KB210604
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.
 

SPRACHE AUSWÄHLEN

 

Related Support Centers