输入:日期,时间,秒数
思路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.
原文:https://www.cnblogs.com/keyuming/p/14876143.html