Help and Support

Funktionen zur Berechnung und Anzeige von Datum/Uhrzeit

Artikel-ID:210604
Geändert am:Mittwoch, 30. Mai 2007
Version:5.0
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

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.

Zum Anfang

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.

Zum Anfang

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.

Zum Anfang

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.

Zum Anfang

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.

Zum Anfang

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.

Zum Anfang

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

Zum Anfang


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

Zum Anfang

Keywords: 
kbhowto kbprogramming KB210604

Zum Anfang

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

 

Other Support Options

  • Contact Microsoft
    Phone Numbers, Support Options and Pricing, Online Help, and more.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.