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 dieses Monats

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

    1. ULTIMO wird mit dem aktuellen Datum gefüllt.
    2. Mit einer Offset-Angabe wird der Tag auf den ersten Tag des laufenden Monats geändert.
    3. 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.

    1. Zunächst wird die Differenz zwischen den Zeitfeldern errechnet. Sie beträgt -64800, da T1 intern nach 72000 konvertiert wird und T2 nach 7200.
    2. Dann wird diese negative Differenz mit der Operation MOD in die Gesamtzahl der Sekunden konvertiert. Eine positive Differenz bliebe dabei unverändert.
    3. 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

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