All files / src/git zcl_abapgit_git_time.clas.abap

98.13% Statements 105/107
50% Branches 1/2
100% Functions 1/1
98.13% Lines 105/107

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 1081x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x     1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
CLASS zcl_abapgit_git_time DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .
 
  PUBLIC SECTION.
 
    TYPES:
      ty_unixtime TYPE c LENGTH 16 .
 
    CLASS-METHODS get_unix
      RETURNING
        VALUE(rv_time) TYPE ty_unixtime
      RAISING
        zcx_abapgit_exception .
 
    CLASS-METHODS get_unix_days_ago
      IMPORTING
        !iv_days       TYPE i
      RETURNING
        VALUE(rv_time) TYPE i
      RAISING
        zcx_abapgit_exception .
 
    CLASS-METHODS get_utc
      IMPORTING
        !iv_unix TYPE ty_unixtime
      EXPORTING
        !ev_date TYPE sy-datum
        !ev_time TYPE sy-uzeit .
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.
 
 
 
CLASS zcl_abapgit_git_time IMPLEMENTATION.
 
 
  METHOD get_unix_days_ago.
* https://www.epochconverter.com
    CONSTANTS lc_seconds_per_day TYPE i VALUE 86400.
    CONSTANTS lc_epoch TYPE timestamp VALUE '19700101000000'.
    DATA lv_time TYPE timestamp.
 
    GET TIME STAMP FIELD lv_time.
 
    rv_time = cl_abap_tstmp=>subtract(
      tstmp1 = lv_time
      tstmp2 = lc_epoch ).
 
    IF iv_days <= 0 OR iv_days > 24855.
      zcx_abapgit_exception=>raise( |Invalid iv_days: { iv_days }| ).
    ENDIF.
 
    rv_time = rv_time - iv_days * lc_seconds_per_day.
  ENDMETHOD.
 
 
  METHOD get_unix.
* returns seconds since Unix epoch, including timezone indicator
 
    CONSTANTS lc_epoch TYPE timestamp VALUE '19700101000000'.
    DATA lv_time TYPE timestamp.
    DATA lv_seconds TYPE i.
 
    GET TIME STAMP FIELD lv_time.
 
    lv_seconds = cl_abap_tstmp=>subtract(
      tstmp1 = lv_time
      tstmp2 = lc_epoch ).
 
    rv_time = lv_seconds.
    CONDENSE rv_time.
    rv_time+11 = '+0000'.
 
  ENDMETHOD.
 
 
  METHOD get_utc.
 
    CONSTANTS lc_epoch TYPE d VALUE '19700101'.
 
    DATA: lv_i       TYPE i,
          lv_utcdiff TYPE t,
          lv_utcsign TYPE c LENGTH 1.
 
 
    lv_i = iv_unix(10).
    lv_utcsign = iv_unix+11.
    lv_utcdiff = iv_unix+12.
 
    " GMT + time-zone
    CASE lv_utcsign.
      WHEN '+'.
        lv_i = lv_i + lv_utcdiff.
      WHEN '-'.
        lv_i = lv_i - lv_utcdiff.
    ENDCASE.
 
    ev_time = lv_i MOD 86400.
    lv_i = lv_i - ev_time.
    lv_i = lv_i / 86400.
    ev_date = lv_i + lc_epoch.
 
  ENDMETHOD.
ENDCLASS.