ABAP的时间日期操作

ABAP的日期类型D,是一个8位字符串;时间类型T,是6位字符串。日期实际是一个字符串,格式;‘YYYYMMDD’,可以通过字符串截取获取年月日字符子串。

示例:使用字符串截取出年份、月份等

"日期

DATA:temp_date(8) TYPE C.

temp_date = sy-datum.

WRITE:/ temp_date.

temp_date = temp_date+2(2).

WRITE:/ temp_date.

1、判断日期是否在指定范围

示例:

WRITE:/'测试日期是否在一个时间段中'.

DATA:date1 type d,

date2 type d.

date1 = '20181201'.

date2 = '20191221'.

if sy-datum > date1 and sy-datum < date2.

WRITE:/ sy-datum,'在范围内'.

else.

WRITE:/ sy-datum,'不在范围内'.

ENDIF.

2、判断日期是星期几

使用function,’DAY_IN_WEEK’判断一个日期是星期几

示例:

WRITE:'根据日期获取日期星期几'.

DATA: wotnr type p.

CALL FUNCTION 'DAY_IN_WEEK'

EXPORTING

DATUM = sy-datum

IMPORTING

WOTNR = wotnr.

WRITE:/ sy-datum,'是星期',wotnr.

3、根据日期获取日期所在周数

使用function,’DATE_GET_WEEK’,获取日期所在周数

示例:

CALL FUNCTION 'DATE_GET_WEEK'

EXPORTING

DATE = sy-datum

IMPORTING

WEEK = week

4、根据周数获取本周第一天日期

示例:

WRITE:/ '测试WEEK_GET_FIRST_DAY ,通过周数获取,本周第一天'.

DATA: date3 type d.

CALL FUNCTION 'WEEK_GET_FIRST_DAY'

EXPORTING

WEEK = week

IMPORTING

DATE = date3

5、检查日期格式是否正确

示例:

WRITE:/ '测试DATE_CHECK_FAILED ,检查日期是否正确'.

data: date4 type d.

data: date5 type d.

data: date6 type d.

date4 = '20101231'. "需要这种格式日期

date5 = '12/23/2019'. "不能识别

date6 = '12312010'. "不能识别

CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'

EXPORTING

DATE = date6

EXCEPTIONS

PLAUSIBILITY_CHECK_FAILED = 1

OTHERS = 2.

6、根据输入日期获取所在月最后一天

示例:

WRITE:/ '测试RP_LAST_DAY_OF_MONTHS,获取输入日期所在月最后一天日期'.

data:date7 type d.

CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'

EXPORTING

DAY_IN = sy-datum

IMPORTING

LAST_DAY_OF_MONTH = date7

EXCEPTIONS

DAY_IN_NO_DATE = 1.

* OTHERS = 2

7、将输入日期进行计算

示例:

WRITE:/'测试RP_CALC_DATE_IN_INTERVAL ,日期加减 年,月,日 计算'.

data: date8 type d value '20181201'.

data: date9 type d.

CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'

EXPORTING

DATE = date8

DAYS = 20 "天

MONTHS = 0 "月

SIGNUM = '-' "运算符号

YEARS = 1 "年

IMPORTING

CALC_DATE = date9.

WRITE:/ date9.

方式2:日期计算函数

"日期計算

FORM f_test_cal_date.

DATA:lv_rectype TYPE alpdbrtyp.

DATA:lv_nbr_dwxmqy TYPE int4.

DATA:lv_date TYPE datum.

DATA:lv_redate TYPE datum.

lv_date = sy-datum.

"rectypes:

"'Z':返回000000

"'I':day,

"'R':day,

"'D':day,

"'H':day,

"'A':week,

"'B':week,

"'W':week,

"'C':week,

"'J':Month,

"'K':Month,

"'M':Month,

"'L':Month,

"'N':quart,

"'O':quart,

"'Q':quart,

"'P':quart,

"'S':Year,

"'T':Year,

"'Y':Year,

"'U':Year,

*

"'E':xdays,

"'F':xdays,

"'X':xdays,

"'G':xdays,

**some special rectypes, only for reporting

*PERFDB_AVERAGE_TYP_DAY_5MIN TYPE ALPERFDB-RECTYPE VALUE '0', "new

*PERFDB_AVERAGE_TYP_WEEK_5MIN TYPE ALPERFDB-RECTYPE VALUE '1', "new

*PERFDB_AVERAGE_TYP_MONTH_5MIN TYPE ALPERFDB-RECTYPE VALUE '3', "new

*PERFDB_AVERAGE_TYP_QUART_5MIN TYPE ALPERFDB-RECTYPE VALUE '4', "new

*PERFDB_AVERAGE_TYP_YEAR_5MIN TYPE ALPERFDB-RECTYPE VALUE '5', "new

*PERFDB_AVERAGE_TYP_XDAYS_5MIN TYPE ALPERFDB-RECTYPE VALUE '2', "new

TYPES:BEGIN OF s_cal_date,

rectype TYPE char6,

num TYPE int4,

END OF s_cal_date.

DATA:lt_cal_date TYPE TABLE OF s_cal_date.

DATA:ls_cal_date LIKE LINE OF lt_cal_date.

ls_cal_date-rectype = '5'.

ls_cal_date-num = 1.

APPEND ls_cal_date TO lt_cal_date.

ls_cal_date-rectype = '0'.

ls_cal_date-num = -1.

APPEND ls_cal_date TO lt_cal_date.

LOOP AT lt_cal_date INTO ls_cal_date.

CALL FUNCTION 'SALP_CALC_DATE'

EXPORTING

IN_RECTYPE = ls_cal_date-rectype

IN_NBR_DWXMQY = ls_cal_date-num

IN_DATE = lv_date

IMPORTING

OUT_DATE = lv_date

EXCEPTIONS

OTHER_ERROR = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

* Implement suitable error handling here

ENDIF.

ENDLOOP.

ENDFORM.

8、获取时间和日期之差

示例:

WRITE:/ '测试SD_DATETIME_DIFFERENCE,获取日期,和时间之间差'.

DATA:date10 type d value '20180911'.

data:date11 type d value '20180922'.

DATA:date12 type p.

data:timediff type p.

CALL FUNCTION 'SD_DATETIME_DIFFERENCE'

EXPORTING

DATE1 = date10

TIME1 = '080000' "必须为 hhmmss格式

DATE2 = date11

TIME2 = '120000'

IMPORTING

DATEDIFF = date12

TIMEDIFF = timediff.

9、获取每个月名字

示例:

WRITE:/ '获取每个月的名字'.

DATA: month_name like t247 OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'MONTH_NAMES_GET'

* EXPORTING

* LANGUAGE = SY-LANGU

* IMPORTING

* RETURN_CODE =

TABLES

MONTH_NAMES = month_name.

10、获取一段时间内节日日期

示例:

WRITE:/'获取节日表'.

DATA: holidays like iscal_day OCCURS 0 WITH HEADER LINE.

DATA: valid_year_from like SCAL-YEAR.

DATA: valid_year_to like SCAL-YEAR.

DATA: return_code like sy-subrc.

CALL FUNCTION 'HOLIDAY_GET'

EXPORTING

HOLIDAY_CALENDAR = 'CN' "获取holiday calendar id, tcode:scal

FACTORY_CALENDAR = 'CN' "获取工厂 calendar id ,通过tcode :SCAL

DATE_FROM = '20180102'

DATE_TO = '20181111'

IMPORTING

YEAR_OF_VALID_FROM = valid_year_from

YEAR_OF_VALID_TO = valid_year_to

RETURNCODE = return_code

TABLES

HOLIDAYS = holidays.

11、判断日期是否是假日

使用function,’HOLIDAY_CHECK_AND_GET_INFO’判断是否是假日,如果是返回值HOLIDAY_FOUND等于‘X’。

示例:

WRITE:'判断是否是假日'.

DATA:holiday_indicator type scal-indicator.

CALL FUNCTION 'HOLIDAY_CHECK_AND_GET_INFO'

EXPORTING

DATE = '20181001'

HOLIDAY_CALENDAR_ID = 'CN'

* WITH_HOLIDAY_ATTRIBUTES = ' '

IMPORTING

HOLIDAY_FOUND = holiday_indicator.

12、获取当前年月

示例:

WRITE:/'获取当前年份月份'.

DATA:cur_year like BKPF-GJAHR.

DATA:cur_month like BKPF-MONAT.

DATA:pre_year like BKPF-GJAHR.

DATA:pre_month like BKPF-MONAT.

CALL FUNCTION 'GET_CURRENT_YEAR'

EXPORTING

BUKRS = 'BV02'

DATE = SY-DATUM

IMPORTING

CURRM = cur_month

CURRY = cur_year

PREVM = pre_month

PREVY = pre_year

.

WRITE:/'当前年月',cur_year,'--',cur_month.

WRITE:/'前一年月',pre_year,'--',pre_month.

Copyright © 2088 竞技新视野 - 电竞赛事活动专题站 All Rights Reserved.
友情链接