ABAP 日期时间相关函数

根据输入日期输出当月第一天和最后一天

HR_JP_MONTH_BEGIN_END_DATE

DATA: lv_iv_date             TYPE d,
      lv_ev_month_begin_date TYPE d,
      lv_ev_month_end_date   TYPE d.

lv_iv_date = '20230519'.

CALL FUNCTION 'HR_JP_MONTH_BEGIN_END_DATE'  "根据输入日期输出当月第一天和最后一天
  EXPORTING
    iv_date             = lv_iv_date  "输入日期
  IMPORTING
    ev_month_begin_date = lv_ev_month_begin_date  "当月第一天
    ev_month_end_date   = lv_ev_month_end_date.  "当月最后一天
    
// 结果
lv_ev_month_begin_date = '20230501'.  "当月第一天
lv_ev_month_end_date = '20230531'.  "当月最后一天

根据输入日期输出当月最后一天

LAST_DAY_OF_MONTHS

DATA: lv_day_in            TYPE sy-datum,
      lv_last_day_of_month TYPE sy-datum.

lv_day_in = '20230519'.

CALL FUNCTION 'LAST_DAY_OF_MONTHS'  "根据输入日期输出当月最后一天
  EXPORTING
    day_in            = lv_day_in  "输入日期
  IMPORTING
    last_day_of_month = lv_last_day_of_month  "输入日期当月最后一天
  EXCEPTIONS
    day_in_no_date    = 1
    OTHERS            = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
    
// 结果
lv_last_day_of_month = '20230531'.  "输入日期当月最后一天

BKK_GET_MONTH_LASTDAY

DATA: LV_i_date TYPE sy-datum,
      lv_e_date TYPE sy-datum.

LV_i_date = '20230520'.

CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'  "获取输入日期当月最后一天
  EXPORTING
    i_date = LV_i_date  "输入日期
  IMPORTING
    e_date = lv_e_date.  "输入日期当月最后一天
    
// 结果
lv_e_date = '20230531'.  "输入日期最后一天

DATE_GET_MONTH_LASTDAY

DATA: LV_i_date TYPE sy-datum,
      lv_e_date TYPE sy-datum.

LV_i_date = '20230520'.

CALL FUNCTION 'DATE_GET_MONTH_LASTDAY'  "获取输入日期当月最后一天
  EXPORTING
    i_date = LV_i_date  "输入日期
  IMPORTING
    e_date = lv_e_date.  "输入日期最后一天
    
// 结果
lv_e_date = '20230531'.  "输入日期最后一天

根据输入日期返回星期几

DAY_IN_WEEK

DATA: lv_datum TYPE d,
      lv_wotnr TYPE p.

lv_datum = '20230521'.

CALL FUNCTION 'DAY_IN_WEEK'  "根据输入日期返回星期几
  EXPORTING
    datum = lv_datum  "输入日期
  IMPORTING
    wotnr = lv_wotnr.  "星期几对应的数值
    
// 结果
lv_wotnr = 7.  "星期几对应的数值

计算开始日期时间和截止日期时间之间的分钟数

DELTA_TIME_DAY_HOUR

DATA: lv_t1      TYPE t,
      lv_t2      TYPE t,
      lv_d1      TYPE d,
      lv_d2      TYPE d,
      lv_minutes TYPE i.

lv_t1 = '080000'.
lv_t2 = '090000'.
lv_d1 = '20230520'.
lv_d2 = '20230521'.

CALL FUNCTION 'DELTA_TIME_DAY_HOUR'  "计算开始日期时间和截止日期时间之间的分钟数
  EXPORTING
    t1      = lv_t1  "开始时间
    t2      = lv_t2  "截止时间
    d1      = lv_d1  "开始日期
    d2      = lv_d2  "截止日期
  IMPORTING
    minutes = lv_minutes.  "相差分钟数
    
// 结果
lv_minutes = 1500.  "相差分钟数

根据输入日期/天/月/年/往前往后输出需要的日期

RP_CALC_DATE_IN_INTERVAL

DATA: lv_date      TYPE p0001-begda,
      lv_days      TYPE t5a4a-dlydy,
      lv_months    TYPE t5a4a-dlymo,
      lv_signum    TYPE t5a4a-split,
      lv_years     TYPE t5a4a-dlyyr,
      lv_calc_date TYPE p0001-begda.

lv_date   = '20230501'.
lv_days   = 10.
lv_months = 1.
lv_signum = '+'.
lv_years  = 1.

CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'  "根据输入日期/天/月/年/往前往后输出需要的日期
  EXPORTING
    date      = lv_date  "输入日期
    days      = lv_days  "天数
    months    = lv_months  "月份
    signum    = lv_signum  "+ 往后   -往前
    years     = lv_years  "IMPORTING
    calc_date = lv_calc_date.  "输出日期
    
// 结果
lv_calc_date = '20240611'.  "输出日期

计算输入开始日期和截止日期之间的天/月/年/期间表

HR_99S_INTERVAL_BETWEEN_DATES

DATA: lv_begda     TYPE d,
      lv_endda     TYPE d,
      lv_tab_mode  TYPE c,
      lv_days      TYPE i,
      lv_c_weeks   TYPE i,
      lv_c_months  TYPE i,
      lv_c_years   TYPE i,
      lt_month_tab TYPE p99sg_month_tab.

lv_begda = '20230520'.
lv_endda = '20230601'.
lv_tab_mode = 'I'.

CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES'  "计算输入开始日期和截止日期之间的天/月/年/期间表
  EXPORTING
    begda     = lv_begda  "开始日期
    endda     = lv_endda  "截止日期
    tab_mode  = lv_tab_mode  "下面的MONTH_TAB是否返回参数  空 不返回  I 返回
  IMPORTING
    days      = lv_days  "相差天数 包括截止当天 所以一般减一
    c_weeks   = lv_c_weeks  "相差周数
    c_months  = lv_c_months  "相差月份
    c_years   = lv_c_years  "相差年数
    month_tab = lt_month_tab.  "开始日期和截止日期之间的月/年/每月第一天/最后一天
    
// 结果
lv_days = 13.  "相差天数 包括截止当天 所以一般减一
lv_c_weeks = 1.  "相差周数
lv_c_months = 0.  "相差月份
lv_c_years = 0.  "相差年数

lt_month_tab
MONTH YEAR BEGDA      ENDDA
05    2023 2023-05-01 2023-05-31
06    2023 2023-06-01 2023-06-30

校验两个日期时间是否重叠

ISU_TIMESLICE_SEC_COMMON

DATA: ls_x_cm_from1 TYPE isu_datetime,
      ls_x_cm_to1   TYPE isu_datetime,
      ls_x_cm_from2 TYPE isu_datetime,
      ls_x_cm_to2   TYPE isu_datetime,
      ls_y_com_from TYPE isu_datetime,
      ls_y_com_to   TYPE isu_datetime,
      lv_y_retcode  TYPE sy-subrc.

ls_x_cm_from1-date = '20230518'.  "日期
ls_x_cm_from1-time = '000000'.  "时间

ls_x_cm_to1-date = '20230520'.  "日期
ls_x_cm_to1-time = '000000'.  "时间

ls_x_cm_from2-date = '20230520'.  "日期
ls_x_cm_from2-time = '000000'.  "时间

ls_x_cm_to2-date = '20230521'.  "日期
ls_x_cm_to2-time = '000000'.  "时间

CALL FUNCTION 'ISU_TIMESLICE_SEC_COMMON'  "校验两个日期是否有重叠
  EXPORTING
    x_cm_from1 = ls_x_cm_from1  "起始日期时间1
    x_cm_to1   = ls_x_cm_to1  "截止日期时间1
    x_cm_from2 = ls_x_cm_from2  "起始日期时间2
    x_cm_to2   = ls_x_cm_to2  "截止日期时间2
  IMPORTING
    y_com_from = ls_y_com_from  "重叠起始日期时间
    y_com_to   = ls_y_com_to  "重叠截止日期时间
    y_retcode  = lv_y_retcode.  "是否有重叠 04// 结果
ls_y_com_from-date = '20230520'.  "日期
ls_y_com_from-time = '000000'.  "时间
ls_y_com_from-date = '20230520'.  "日期
ls_y_com_from-time = '000000'.  "时间
lv_y_retcode = 0.  "重叠
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值