SAP 日期时间处理总结

日期转换逻辑
 CALL FUNCTION ' CONVERSION_EXIT_INVDT_OUTPUT'
            EXPORTING
              input  = gs_exch_rate-gdatu  “789689”
            IMPORTING
              output = l_date.   “2021.09.08”
          SELECT SINGLE datfm FROM usr01 WHERE bname = @sy-uname INTO @DATA(lv_datfm).
          IF lv_datfm = '1'.
            CONCATENATE l_date+6(4) l_date+3(2) l_date(2) INTO gs_exch_rate-date.
          ELSEIF lv_datfm = '4'.
            CONCATENATE l_date+0(4) l_date+5(2) l_date+8(2) INTO gs_exch_rate-date.
          ENDIF.
把时间和日期转成时间戳
 CONVERT DATE IV_DATE  TIME IV_TIME
             INTO TIME STAMP EV_TIMESTAMP
                  TIME ZONE  SY-ZONLO.
把时间和日期转成时间 函数 
CALL FUNCTION ' CIF_GEN4_CONVERT_DATETIME'
  EXPORTING
    iv_date                      = l_datum1
    IV_TIME                      = l_time1
    IV_TIMEZONE                  = SY-ZONLO
  IMPORTING
    EV_TIMESTAMP                 = l_timestamp1
 EXCEPTIONS
   TIME_CONVERSION_FAILED       = 1
   OTHERS                       = 2.
 把时间戳转成日期时间:
CONVERT TIME STAMP IV_TIMESTAMP
               TIME ZONE  LV_UTCZONE
               INTO DATE  EV_DATE
                    TIME  EV_TIME.
把时间戳转成日期时 函数 
CALL FUNCTION ' CIF_GEN4_CONVERT_TIMESTAMP'
  EXPORTING
    iv_timestamp                = l_timestamp3
   IV_TIMEZONE                  = SY-ZONLO
SAP时间转换为Javashijainchuo
将ABAP时间戳转换为JAVA时间戳
DATA:lv_timestampl TYPE timestampl."长时间格式的时间戳
DATA:lv_str_timestampl TYPE char22.
GET TIME STAMP FIELD lv_timestampl.
调用系统类方法进行数据获得java时间戳(毫秒级别)
DATA lv_java_timestamp TYPE string.
cl_pco_utility=>convert_abap_timestamp_to_java(
  EXPORTING
    iv_date      = conv #( lv_str_timestampl(8)    )
    iv_time      = conv #( lv_str_timestampl+8(6) )
    iv_msec      = conv #( lv_str_timestampl+15(3) )
  IMPORTING
    ev_timestamp = lv_java_timestamp ).
        CLEAR:LV_JAVA_TIMESTAMP,LV_DATE,LV_TIME.
        LV_JAVA_TIMESTAMP =  LS_LIST-CREATETIMESTAMP.
         CL_PCO_UTILITY=>CONVERT_JAVA_TIMESTAMP_TO_ABAP(
           EXPORTING
            IV_TIMESTAMP = LV_JAVA_TIMESTAMP
          IMPORTING
            EV_DATE = LV_DATE
            EV_TIME = LV_TIME ).
         CONVERT DATE LV_DATE TIME LV_TIME INTO TIME STAMP DATA(LV_TIMESTAMP2) TIME ZONE ' UTC'.
        CLEAR:LV_DATE,LV_TIME.
         CONVERT TIME STAMP LV_TIMESTAMP2 TIME ZONE SY-ZONLO INTO DATE LV_DATE TIME LV_TIME.
时间戳转换:
DATA TIME TYPE TIMESTAMP.
  DATA LV_TSTMP1 TYPE P.
  DATA LV_TSTMP2 TYPE P.
  DATA LV_SECS TYPE TIMESTAMP.
   CONVERT DATE P_DATE TIME P_TIME
                     INTO TIME STAMP TIME TIME ZONE SY-ZONLO.
  LV_TSTMP1 = TIME.
  LV_TSTMP2 = '19700101000000'.
  TRY.
       CALL METHOD CL_ABAP_TSTMP=>SUBTRACT
        EXPORTING
          TSTMP1 = LV_TSTMP1
          TSTMP2 = LV_TSTMP2
         RECEIVING
          R_SECS = LV_SECS.
    CATCH CX_PARAMETER_INVALID_RANGE .
    CATCH CX_PARAMETER_INVALID_TYPE .
  ENDTRY.
1、时间差计算函数(单位秒)
SWI_DURATION_DETERMINE
时间戳相差秒数函数
/SDF/CMO_TIME_DIFF_GET
时间分秒计算
获的两个日期之间的分钟数
data min TYPE i.
CALL FUNCTION 'DELTA_TIME_DAY_HOUR'
EXPORTING
T1 = '060000'
T2 = '070000'
D1 = '20160101'
D2 = '20160101'
IMPORTING
MINUTES = min .
write min.
l_timestamp =  CL_ABAP_TSTMP=>ADD(
           TSTMP   = l_timestamp  (YYMMDDHHMMSS)
           SECS    = 5 ).    【加的秒数】
日期加减年月日自建函数
 获取两个日期期间的:天数、周数、月数、年数
包括期间月份的开始(月份第一天日期)、截止日期(月份最后一天日期)
TYPE-POOLS: p99sg.
DATA: days TYPE i,
weeks TYPE i,
months TYPE i,
years TYPE i.
DATA: month_tab TYPE STANDARD TABLE OF p99sg_month_tab_row.
CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES'
EXPORTING
begda = '20150101' "开始日期
endda = '20160101' "截止日期
IMPORTING
days = days "返回天数:266
c_weeks = weeks "返回周数:52
c_months = months "返回月数:12
c_years = years "返回年数:1
month_tab = month_tab. "期间月份首尾日
两个日期相差天数月份年计算函数
FIMA_DAYS_AND_MONTHS_AND_YEARS
过函数计算两个日期的差异月份
CALL FUNCTION 'MONTHS_BETWEEN_TWO_DATES_NEW'
EXPORTING
I_DATUM_BIS =
I_DATUM_VON =
* I_KZ_INCL_BIS = ' '
* I_KZ_VOLLE_MONATE = 'X'
IMPORTING
E_MONATE =
获取输入日期月份的最后一天的日期
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = '20160104' "输入日期
IMPORTING
last_day_of_month = "返回最后一天日期:20160131
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
 
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
day_in = '20160101'
IMPORTING
last_day_of_month = date 20160131
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
 
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
EXPORTING
i_date = '20160101' "输入日期
IMPORTING
e_date = date. 20160131
根据条件获取需要的日期 
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = '20160101' "日期
days = 10 "天数
months = 0 "月数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值