[ABAP] Monatsnamen ermitteln (sprachabhängig)

DATA: it_month_names TYPE STANDARD TABLE OF t247.
DATA: rc TYPE sy-subrc.

CALL FUNCTION 'MONTH_NAMES_GET'
  EXPORTING
    language              = sy-langu
  IMPORTING
    return_code           = rc
  TABLES
    month_names           = it_month_names
  EXCEPTIONS
    month_names_not_found = 1
    OTHERS                = 2.

IF sy-subrc NE 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
  IF rc = 0.
    LOOP AT it_month_names INTO DATA(wa).
      WRITE: / wa-spras, wa-mnr, wa-ktx, wa-ltx.
    ENDLOOP.
  ENDIF.
ENDIF.

[ABAP] Mit Zeitstempel rechnen

Variante 1 (cl_abap_tstmp)

DATA: l_ts TYPE timestamp.
DATA: l_ts_out TYPE timestamp.

GET TIME STAMP FIELD l_ts.

* 3600s zum Zeitstempel hinzurechnen
l_ts_out = cl_abap_tstmp=>add( tstmp = l_ts
                               secs = 3600 ).

WRITE: / l_ts TIME ZONE sy-zonlo.
WRITE: / l_ts_out TIME ZONE sy-zonlo.

Variante 2 (cl_hrpad_date_computations)

* add_weeks_to_date             -> Addiert Anzahl Wochen zum Datum
* add_months_to_date            -> Addiert Anzahl Monate zum Datum
* add_years_to_date             -> Addiert Anzahl Jahre zum Datum
* subtract_weeks_from_date      -> Subtrahiert Anzahl Wochen vom Datum
* subtract_months_from_date     -> Subtrahiert Anzahl Monate vom Datum
* subtract_years_from_date      -> Subtrahiert Anzahl Jahre vom Datum
* get_weekday_number            -> Ermittelt Nummer des Wochentags
* get_weekday_number_shifted    -> Ermittelt Nummer des Wochentags (verschoben)
* get_first_day_calendar_week   -> Ermittelt den ersten Tag einer Kalenderwoche für best. Jahr
* get_last_weekday_number       -> Bestimmt Nummer des letzten Wochentags
* get_first_day_in_week         -> Ermittelt den ersten Tag einer Woche
* get_first_day_in_shifted_week -> Ermittelt den ersten Tag einer Woche (verschoben)
* get_first_day_previous_month  -> Ermittelt den ersten Tag im davorliegenden Monat
* get_week                      -> Ermittelt die Woche in der das Datum liegt (verschoben)
* get_shifted_week              -> Ermittelt die Woche in der das Datum liegt (verschoben)
* get_last_day_in_month         -> Berechnet den letzten Tag des laufenden Monats
* get_last_day_previous_month   -> Ermittelt den letzten Tag des davorliegenden Monats
* get_days_per_year             -> Ermittelt Anzahl der Tage pro Jahr

Variante 3 (cl_bs_period_toolset_basics)

* erster Tag des aktuellen Monats
DATA(lv_first_day) = cl_bs_period_toolset_basics=>get_first_day_in_month( iv_date = sy-datum ).
WRITE: / lv_first_day.

* erster Tag des vorherigen Monats
DATA(lv_first_day) = cl_bs_period_toolset_basics=>get_first_day_prev_month( iv_date = sy-datum ).
WRITE: / lv_first_day.

* letzter Tag des vorherigen Monats
DATA(lv_last_day) = cl_bs_period_toolset_basics=>get_last_day_prev_month( iv_date = sy-datum ).
WRITE: / lv_last_day.

* letzter Tag des aktuellen Monats
DATA(lv_last_day) = cl_bs_period_toolset_basics=>get_last_day_in_month( iv_date = sy-datum ).
WRITE: / lv_last_day.

* 60 Minuten zu Zeit und Datum hinzurechnen
cl_bs_period_toolset_basics=>add_minutes_to_date( EXPORTING
                                                    iv_date    = sy-datum
                                                    iv_time    = sy-uzeit
                                                    iv_minutes = 60
                                                  IMPORTING
                                                    ev_date    = DATA(lv_date_new)
                                                    ev_time    = DATA(lv_time_new) ).

WRITE: / lv_date_new, lv_time_new.

[ABAP] Datentypen für Zeitdarstellung und deren Verwendung

DATA: lv_dt TYPE d.           " Datum (YYYYMMDD)
DATA: lv_tm TYPE t.           " Zeit (HHMMSS)
DATA: lv_ts TYPE timestamp.   " Zeitstempel kurz (YYYYMMDDhhmmss)
DATA: lv_tsl TYPE timestampl. " Zeitstempel lang (YYYYMMDDhhmmss,mmmuuun)

* Systemzeit holen
lv_tm = sy-uzeit.

* Systemdatum holen
lv_dt = sy-datum.

* Zeitstempel kurz holen
GET TIME STAMP FIELD lv_ts.

* Zeitstempel lang holen
GET TIME STAMP FIELD lv_tsl.

* Zeit formatiert ausgeben
WRITE: / lv_dt MM/DD/YYYY.

* Datum formatiert ausgeben
WRITE: /(8) lv_tm USING EDIT MASK '__:__:__'.

* Zeitstempel kurz entsprechend der lokalen Zeitzone des Users ausgeben
WRITE: / lv_ts TIME ZONE sy-zonlo.

* Zeitstempel lang entsprechend der lokalen Zeitzone des Users ausgeben
WRITE: / lv_tsl TIME ZONE sy-zonlo.

[ABAP] Laufzeitmessung von ABAP-Code

Variante 1

DATA(o_timer) = cl_abap_runtime=>create_hr_timer( ).
DATA(usec_start) = o_timer->get_runtime( ).

...

DATA(usec_end) = o_timer->get_runtime( ).
DATA(usec) = CONV decfloat16( usec_end - usec_start ).
DATA(sec) = usec / 1000000.

Variante 2

DATA: usec_start TYPE i.
DATA: usec_end TYPE i.
DATA: usec TYPE i.

GET RUN TIME FIELD usec_start. " Startzeitpunkt

...

GET RUN TIME FIELD usec_end. " Endzeitpunkt

usec = ( usec_end - usec_start ).

WRITE: / | { usec }µs |.

[ABAP] Mit Datumswerten rechnen

DATA: dt TYPE sy-datum.

CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'  " Funktionsbaustein zur Datumsrechnung aufrufen
  EXPORTING
    date      = sy-datum                  " Eingangswert ist Systemdatum
    days      = 0                         " 0 Tage
    months    = 0                         " 0 Monate
    signum    = '-'                       " Operator, hier '-' für Werte abziehen
    years     = 1                         " 1 Jahr
  IMPORTING
    calc_date = dt.                       " Rückgabewert in 'dt' speichern