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 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:
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.
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.
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