Show TOC Anfang des Inhaltsbereichs

Datums- und Zeitberechnungen  Dokument im Navigationsbaum lokalisieren

Der Datentyp von Datums- und Zeitfeldern ist nicht numerisch sondern zeichenartig. Es können trotzdem numerische Operationen mit Datums- und Zeitfeldern durchgeführt werden, da eine automatische Typkonvertierung stattfindet. Bei Berechnungen mit Datums- und Zeitfeldern, kann auch die Adressierung von Teilfeldern hilfreich sein.

Beispiel

Beispiel für Datumsberechnung

DATA: ultimo TYPE d.

ultimo      = sy-datum.
ultimo+6(2) = '01'.          " = erster Tag dieses Monats
ultimo      = ultimo - 1.    " = letzter Tag des Vormonats

In diesem Beispiel wird der letzte Tag des Vormonats dem Datumsfeld ultimo zugewiesen:

        ultimo wird mit dem aktuellen Datum gefüllt.

        Mit einer Offset-Angabe wird der Tag auf den ersten Tag des laufenden Monats geändert.

        Von ultimo wird 1 subtrahiert. Damit wird der Inhalt von ultimo auf den letzten Tag des Vormonats geändert. Vor Durchführung der Subtraktion konvertiert das System ultimo in die Anzahl der Tage seit 01.01.0001 und konvertiert dann das Ergebnis in ein Datum zurück.

Beispiel

Beispiel für Zeitberechnung

DATA: diff       TYPE i,
      seconds TYPE i,
      hours   TYPE i.

DATA: t1 TYPE t VALUE '200000',
      t2 TYPE t VALUE '020000'.

diff = t2 - t1.
seconds = diff MOD 86400.
hours = seconds / 3600.

Die Anzahl der Stunden zwischen 02:00:00 und 20:00:00 wird errechnet.

        Zunächst wird die Differenz zwischen den Zeitfeldern errechnet. Sie beträgt -64800, da t1 intern nach 72000 konvertiert wird und t2 nach 7200.

        Dann wird diese negative Differenz mit der Operation MOD in die Gesamtzahl der Sekunden konvertiert. Eine positive Differenz bliebe dabei unverändert.

        Schließlich wird die Anzahl der Stunden errechnet, indem die Anzahl der Sekunden durch 3600 geteilt wird.

Die letzten drei Zeilen können auch durch eine Zeile ersetzt werden:

HOURS = ( ( t2 - t1) MOD 86400) / 3600.

Invertiertes Datum 

AchtungDiese Anweisungen sind obsolet und stehen nur noch aus Gründen der Kompatibilität zu Releases vor 4.6 bzw. 6.10 zur Verfügung. Die Anweisungen können in älteren Programmen noch gefunden werden, sollten aber nicht mehr verwendet werden.

 

In manchen Fällen, z.B. bei der absteigenden Sortierung von Daten, ist es sinnvoll, ein Datum vom Typ d mit dem Schlüsselwort CONVERT in ein invertiertes Datum umzusetzen:

CONVERT DATE d1 INTO INVERTED-DATE d2.

Danach kann das invertierte Datum wieder in ein Datum zurück-konvertiert werden:

CONVERT INVERTED-DATE d1 INTO DATE d2.

Diese Anweisungen konvertieren das Feld d1 von den Formaten DATE oder INVERTED-DATE nach INVERTED-DATE bzw. DATE und weisen es dem Feld d2 zu.

Für die Konvertierung bildet ABAP das Neunerkomplement.

Beispiel

DATA: odate TYPE d VALUE '19955011',
      idate LIKE odate.

DATA  field(8) TYPE c.

field = odate.         WRITE / field.

CONVERT date odate INTO INVERTED-DATE idate.

field = idate.         WRITE / field.

CONVERT INVERTED-DATE idate INTO DATE odate.

field = odate.         WRITE / field.

Listenausgabe:

19955011

80049488

19955011

 

 

Ende des Inhaltsbereichs