Allgemeines zu den Timestamps
Gerade SAP Kunden sind meist global agierende Unternehmen, mit Mitarbeitern in verschiedenen Kontinenten bzw. Zeitzonen. Da leider immer noch viele Entwicklungen – auch im SAP Standard – nach wie vor nur mit sy-uzeit bzw. sy-datum arbeiten, habe ich mich entschlossen, hier ein paar Informationen zu Timestamps in ABAP bzw. SAP niederzuschreiben.
Die bereits erwähnten Systemfelder sy-datum und sy-uzeit sind für viele Anwendungen nicht ausreichend:
- bei sy-datum und sy-uzeit handelt es sich um lokale Zeitangaben. Global agierende Unternehmen, mit Standorten in verschiedenen Zeitzonen müssen den Anwendern Zeiten in deren Zeitzone darstellen können.
- sy-uzeit enthält die Zeit lediglich auf Sekunden genau.
Erzeugung eines Timestamps in ABAP bzw. SAP mit GET TIME STAMP
Für die Erzeugung eines aktuellen Timestamps in einem SAP System wird das ABAP Kommando get time stamp … verwendet. Das Kommando erzeugt einen Zeitstempel für die UTC-Zeit des aktuellen ABAP Systems. Entsprechend der Definition des Zielfeldes wird der Timestamp entweder in der Kurz- oder Langform erstellt. Üblicherweise werden für die Felddefinition der Timestamp-Felder die Datenelemente timestamp bzw. timestampl verwendet.
Im nachfolgenden Beispiel werden beide Timestamp-Formate erstellt:
1 2 3 4 5 6 |
data: l_timestamp type timestamp, l_timestampl type timestampl. … get time stamp field l_timestamp. get time stamp field l_timestampl. … |
Hinweis: Ein Timestamp ist nicht immer „eindeutig“. Sprich, ein Programm dass in kurzer Zeit mehrere Timestamps zieht, könnte unter Umständen die gleichen Timestamps ziehen.
Konvertierung/Umrechnung von Timestamps
Timestamps können mit Hilfe des Kommandos convert time stamp … in bzw. von Datum- bzw. Uhrzeitfeld (type d und t) konvertiert werden. Für die Konvertierung eines Timestamps in ein Datum- bzw. Uhrzeitfeld ist mit dem Zusatz time zone die Zeitzone anzugeben. Wie oben erwähnt, erhält man bei get time stamp den Zeitstempel in UTC Zeit. Bei der Konvertierung eines Datums bzw. Uhrzeit in einen Timestamp kann mit dem Zusatz time zone die Zeitzone für das Datum- bzw. Uhrzeitfeld mitgegeben werden.
Nachfolgendes Beispiel konvertiert einen Timestamp in ein Datum- bzw. Uhrzeitfeld. Als Ziel-Zeitzone wird die Zeitzone des Anwenders sy-zonlo verwendet. Die Zeitzone kann in den persönlichen Einstellungen am Userstamm eingestellt werden.
1 2 3 4 5 6 7 |
data: l_timestamp type timestamp, l_date type d, l_time type t. … get time stamp field l_timestamp. … convert time stamp l_timestamp time zone sy-zonlo into date l_date time l_time. |
Nachfolgend das Gegenstück, ein Beispiel zur Konvertierung eines Datum- bzw. Uhrzeitfeldes in einen Timestamp:
1 2 3 4 5 6 7 8 |
data: l_timestamp type timestamp, l_date type d, l_time type t. … move sy-datum to l_date. move sy-uzeit to l_time. … convert date l_date time l_time into time stamp l_timestamp time zone sy-zonlo. |
Manchmal besteht die Anforderung darin, ein Datum/Zeit von einer Zeitzone in eine andere Zeitzone zu konveriteren. Ich verwende dazu als Hilfe die Konvertierung in einen Timestamp. Sprich, zuerst Konvertierung von Datum/Uhrzeit der Ausgangszeitzone in einen Timestamp, dann Konvertierung des Timestamps in Datum/Uhrzeit der Zielzeitzone.
Zusatz DAYLIGHT SAVING TIME field
Mit diesem Zusatz erhält man die Information, ob sich der Zeitstempel für die angegebene Zeitzone in der Sommerzeit befindet.
Klasse cl_abap_tstmp – Berechnungen von Timestamps
Für verschiedene Berechnungen, Prüfungen oder Konvertierungen steht in einem ABAP System die Klasse cl_abap_tstmp zur Verfügung. Die Klasse bietet verschiedene Methoden an, nachfolgende Methoden sind hervorzuheben:
- add Addition von x Sekunden zu einem Timestamp
- subtract Subtraktion eines Timestamps von einem anderen Timestamp
- subtractsec Subtraktion von x Sekunden von einem Timestamp
- compareVergleich von zwei Timestamps
Für weitere Informationen zu den restlichen Methoden bitte direkt in die Klasse/Methode einsteigen und die Dokumentation aufrufen.
Weitere Informationen stehen auch in der SAP Hilfe unter https://help.sap.com/docs/SAP_NETWEAVER_700/109dcbed6c531014bc94b876083bbe59/4d591ec163e444b4e10000000a42189e.html?locale=de-DE zur Verfügung
Ab 7.53 gibt es einen neuen Timestamp ABAP-Typ UTCLONG. – Details dazu unter https://www.cadaxo.com/high-class-development/abap-7-54-neuer-timestamp-utclong/