ABAP 时间计算 增加秒

输入:日期,时间,秒数

思路1:把秒进行计算,得到天数和剩余的秒;天数累加到日期上的到新日期,秒累加到时间上得到新时间(如果新时间小于旧时间,说明夸天,新日期需要加1)

思路2:日期、时间转换成时间戳,使用 Function: TIMESTAMP_DURATION_ADD, 得到累加后的时间戳;解析新的时间戳得到结果

输出:累加后的日期,累加后的时间

 

 

DATA: lv_date   TYPE sy-datum VALUE '20130210',
      lv_time   TYPE sy-uzeit VALUE '080730',
      lv_second TYPE int4 VALUE '10000'.
DATA: lv_date_n TYPE sy-datum,
      lv_time_n TYPE sy-uzeit.
WRITE: |{ lv_date } { lv_time } |.
PERFORM sub_time_add_second.
WRITE: / |{ lv_date_n } { lv_time_n } |.
PERFORM sub_time_add_second2.
WRITE: / |{ lv_date_n } { lv_time_n } |.


FORM sub_time_add_second.

  DATA: lv_day        TYPE i,
        lv_hour       TYPE i,
        lv_minu       TYPE i,
        lv_sec        TYPE i,
        lv_day_second TYPE i.
  BREAK-POINT.
  "每天有多少秒
  lv_day_second = 24 * 60 * 60.
  lv_day = lv_second DIV lv_day_second.                                "得到天数
  lv_sec = lv_second MOD lv_day_second.                                "得到剩余的秒数
  WRITE: / |累加{ lv_second }秒(即{ lv_day }天{ lv_sec }秒) |.

  lv_date_n = lv_date + lv_day.
  lv_time_n = lv_time + lv_sec.
  IF lv_time_n < lv_time.
    lv_date_n = lv_date_n + 1.
  ENDIF.

ENDFORM.

FORM sub_time_add_second2.

  DATA: lv_timestamp   TYPE tzntstmps,
        lv_timestamp_n TYPE tzntstmps.
  "转换成时间戳
  CONVERT DATE lv_date
          TIME lv_time
  INTO TIME STAMP lv_timestamp TIME ZONE 'UTC'. "sy-zonlo.
  "时间戳累加
  CALL FUNCTION 'TIMESTAMP_DURATION_ADD'
    EXPORTING
      timestamp_in    = lv_timestamp
      timezone        = 'UTC'
      duration        = lv_second
      unit            = 'S'
    IMPORTING
      timestamp_out   = lv_timestamp_n
    EXCEPTIONS
      timestamp_error = 1
      OTHERS          = 2.
  WRITE: / |时间戳{ lv_timestamp } + { lv_second } = { lv_timestamp_n }|.
  "时间戳解析
  CONVERT TIME STAMP lv_timestamp_n TIME ZONE 'UTC' "sy-zonlo
  INTO DATE lv_date_n
       TIME lv_time_n.

ENDFORM.

 

posted @ 2021-06-11 18:09  客于溟  阅读(1347)  评论(0)    收藏  举报