abap获取日期_ABAP 日期时间函数

获取查询日期该年的第几周

输出格式:YYYYWW

获取查询日期该天是星期几

获取查询日期该年的第几周和这周周一、周日日期

周起始日是周一

获取查询日期该年的第几周和这周周一、周日日期,该天是周几

周起始日是周日

DATE_CHECK_PLAUSIBILITY

检查日期有效性

SY-SUBRC = 0 有效

TIME_CHECK_PLAUSIBILITY

检查时间有效性

SY-SUBRC = 0 有效

获取两日期间的:天数、周数、月数、年数、期间月份开始截止日期

比较两个日期大小

返回:GT、EQ、LT等

查看日期属性 包括:该日期是星期几,第几天(周2=2),是不是公共假期等

需要输入国家日历

弹出日历对话框,供用户选择日期

弹出时间对话框,供用户选择时间

获得当前的财政年(fiscal year)

FIRST_DAY_IN_PERIOD_GET

获得期间首日

LAST_DAY_IN_PERIOD_GET

获得期间末日

函数操作说明:

获取输入日期前、后的年、月、日

DATA: date TYPE vtbbewe-dvalut,

flag TYPE trff_flg,

days TYPE trff_type_n_2.

CALL FUNCTION 'FIMA_DATE_CREATE'

EXPORTING

i_date = '20140101' "输入日期

i_flg_end_of_month = ' '

i_years = 2 "两年后的日期. 即输入日期的年加2所得日期,可为负数,表示前两年

i_months = 1 "一个月后的日期.即输入日期的月加1所得日期,可为负数,表示前一个月

i_days = 23 "23天后的日期。可为负数,表示23天前的日期

i_calendar_days = 10 "10天后的日历。同I_DAYS参数。

i_set_last_day_of_month = 'X' "返回的日期为当前月份的最后一天

IMPORTING

e_date = date "返回的日期为当前月份的最后一天

e_flg_end_of_month = flag "如果输入参数I_SET_LAST_DAY_OF_MONTH设置’X’了,则返回值为’X’。

e_days_of_i_date = days. "返回输入日期的i_calendar_days字段与I_DAYS字段的和。

输出结果:

date:2016.03.31

flag:X

days:24

获取输入日期前、后的年、月、日

DATA calc_date TYPE p0001-begda.

CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'

EXPORTING

date = '20140101' "输入日期

days = 10 "天数

months = 0 "月数

signum = '+' "+号:表示 N天/月/年后的日期, -号:表示过去的日期

years = 0 "年数

IMPORTING

calc_date = calc_date. "返回结果:10天后的日期(2014.01.11)

获取输入日期最后一天的日期

DATA date TYPE sy-datum.

CALL FUNCTION 'LAST_DAY_OF_MONTHS'

EXPORTING

day_in = '20140101' "输入日期

IMPORTING

last_day_of_month = date "返回日期:20140131

EXCEPTIONS

day_in_no_date = 1

OTHERS = 2.

获取输入日期最后一天的日期

DATA date TYPE sy-datum.

CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'

EXPORTING

day_in = '20140101' "输入日期

IMPORTING

last_day_of_month = date "返回日期:20140131

EXCEPTIONS

day_in_no_date = 1

OTHERS = 2.

获取输入日期最后一天的日期

DATA date TYPE sy-datum.

CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'

EXPORTING

i_date = '20140101' "输入日期

IMPORTING

e_date = date. "返回日期:20140131

获取输入日期过去N月的日期

DATA date TYPE sy-datum.

CALL FUNCTION 'CCM_GO_BACK_MONTHS'

EXPORTING

currdate = '20140101' "输入日期

backmonths = 3 "过去月数

IMPORTING

newdate = date. "返回日期:20131001

获取输入日期后来N月的日期

DATA date TYPE sy-datum.

CALL FUNCTION 'MONTH_PLUS_DETERMINE'

EXPORTING

months = 3

olddate = '20140101' "输入日期

IMPORTING

newdate = date. "返回日期:20140401

获取输入日期该年的周数,输出格式为:YYYYWW。

DATA week TYPE scal-week.

CALL FUNCTION 'DATE_GET_WEEK'

EXPORTING

date = '20140101' "输入日期

IMPORTING

week = week "返回周数:201401

EXCEPTIONS

date_invalid = 1

OTHERS = 2.

获取输入周数的第一天

DATA date TYPE sy-datum.

CALL FUNCTION 'WEEK_GET_FIRST_DAY'

EXPORTING

week = '201401' "输入周

IMPORTING

date = date "返回该周第一天(周一):2013.12.30

EXCEPTIONS

week_invalid = 1

OTHERS = 2.

获取输入日期该天是星期几/周几

DATA wotnr TYPE p.

CALL FUNCTION 'DAY_IN_WEEK'

EXPORTING

datum = '20140101' "输入日期

IMPORTING

wotnr = wotnr. "返回:3 =》星期三/周三

获取输入日期该年的周数和这周周一、周日日期(周起始日是周一)

DATA: week TYPE scal-week ,

monday TYPE sy-datum,

sunday TYPE sy-datum.

CALL FUNCTION 'GET_WEEK_INFO_BASED_ON_DATE'

EXPORTING

date = '20140101'

IMPORTING

week = week "返回周数:201401

monday = monday "返回周一日期:2013.12.30

sunday = sunday. "返回周日日期:2014.01.05

获取查询日期该年的第几周和这周周一、周日日期,该天是星期几/周几(周起始日是周日)

DATA: sunday TYPE sy-datum,

saturday TYPE sy-datum,

day_in_week TYPE i,

week_no TYPE p08_weekno.

CALL FUNCTION 'HR_GBSSP_GET_WEEK_DATES'

EXPORTING

p_pdate = '20140101' "输入日期

IMPORTING

p_sunday = sunday "返回本周开始日期(周日):2013.12.29

p_saturday = saturday "返回本周结束日期(周六):2014.01.04

p_day_in_week = day_in_week "返回该日星期几/周几: 4 => 星期三/周三

"(这周中的第4天,由于开始日期是周日,故需要-1)

p_week_no = week_no. "返回本周开始日期的周数:201352

判断某天是否是假日

DATA holiday TYPE c.

DATA attributes TYPE SORTED TABLE OF thol.

CALL FUNCTION 'HOLIDAY_CHECK_AND_GET_INFO'

EXPORTING

date = '20140201' "输入日期:春节

holiday_calendar_id = 'ZS' "假日日历 ID

with_holiday_attributes = ' ' "属性标识

IMPORTING

holiday_found = holiday "输出是否为假日的标记 输出结果:X

TABLES

holiday_attributes = attributes "输出该假日的属性

"若WITH_HOLIDAY_ATTRIBUTES参数 = X,则会带出属性记录

EXCEPTIONS

calendar_buffer_not_loadable = 1

date_after_range = 2

date_before_range = 3

date_invalid = 4

holiday_calendar_id_missing = 5

holiday_calendar_not_found = 6

OTHERS = 7.

将标准日期格式转换为内部数字格式

日期的格式与用户参数有关,转化为内部数字格式时,都为:YYYYMMDD.

DATA date TYPE sy-datum.

CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'

EXPORTING

date_external = '2014.01.01' "当前用户日期格式:YYYY.MM.DD

accept_initial_date = ' '

IMPORTING

date_internal = date "输出20140101

EXCEPTIONS

date_external_is_invalid = 1

OTHERS = 2.

将内部数字日期格式转换为系统日期格式

系统日期格式输出时,与用户参数设置有关

DATA date2(10) TYPE c.

CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'

EXPORTING

date_internal = '20140101'

IMPORTING

date_external = date2 "根据用户日期格式参数输出:YYYY.MM.DD

EXCEPTIONS

date_internal_is_invalid = 1

OTHERS = 2.

根据日期返回工厂日历日期

DATA: date TYPE scal-date,

factorydate TYPE facdate,

workingday TYPE scal-indicator.

CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'

EXPORTING

correct_option = '+' "表示工作日计算方式的标记

date = '20140101' "必须转换的日期

factory_calendar_id = 'ZS' "工厂日历ID

IMPORTING

date = date "工厂日历日期

factorydate = factorydate "指定日历中的工作日数

workingday_indicator = workingday "表示某日期是否为工作日的标志

EXCEPTIONS

calendar_buffer_not_loadable = 1

correct_option_invalid = 2

date_after_range = 3

date_before_range = 4

date_invalid = 5

factory_calendar_not_found = 6

OTHERS = 7.

输出结果:

date: 20140102

factorydate: 1531

workingday: +

获取两个日期期间的:天数、周数、月数、年数;

包括期间月份的开始(月份第一天日期)、截止日期(月份最后一天日期)

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 = '20130101' "开始日期

endda = '20140101' "截止日期

IMPORTING

days = days "返回天数:266

c_weeks = weeks "返回周数:52

c_months = months "返回月数:12

c_years = years "返回年数:1

month_tab = month_tab. "期间月份首尾日

month_tab 内容明细:

计算两个日期期间的天数

DATA: days TYPE i,

months TYPE i,

years TYPE i.

CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'

EXPORTING

i_date_from = '20130101'

i_date_to = '20141001'

i_flg_separate = ' ' "是否单独计算 若有标识,则返回两日期相差的天数

IMPORTING

e_days = days "返回天数:638

e_months = months "返回月数:21

e_years = years. "返回年数:2

* 单独计算

CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'

EXPORTING

i_date_from = '20130101'

i_date_to = '20141001'

i_flg_separate = 'X' "标识 'X'

IMPORTING

e_days = days "返回天数:0

e_months = months "返回月数:9

e_years = years. "返回年数:1

比较两个日期大小,返回结果是关系操作符:GT、EQ、LT

TYPE-POOLS trff .

DATA log_op TYPE trff_type_c_2.

CALL FUNCTION 'FIMA_DATE_COMPARE'

EXPORTING

i_flg_intraday = ' '

i_date = '20140101'

i_time = '000000'

i_sincl = '0' "计算期间开始的排除标识

i_sult = ' ' "计算期间开始的月末标识符

i_comp_date = '20140201' "比较日期

i_comp_time = '000000' "比较时间

i_comp_sincl = '0' "计算期间结束的包含标识

i_comp_sult = ' ' "计算期间结束的月末标识符

IMPORTING

e_log_op = log_op. "返回比较结果:LT

两个日期作差,即是两个日期相减,包括当天时间。

DATA: datediff TYPE p,

timediff TYPE p,

earliest TYPE c.

CALL FUNCTION 'SD_DATETIME_DIFFERENCE'

EXPORTING

date1 = '20140101'

time1 = '240000'

date2 = '20140101'

time2 = '083000'

IMPORTING

datediff = datediff "返回日期差:0

timediff = timediff "返回时间差:16

earliest = earliest "返回时间正负:2,1-负 0-相等 2-正

EXCEPTIONS

invalid_datetime = 1

OTHERS = 2.

12小时制与24小时制的时间转换,例如:07:00:00 pm -> 19:00:00。

DATA: lv_in_time TYPE tims,

lv_out_time TYPE tims,

lv_am_pm TYPE c.

lv_in_time = '060000'.

CALL FUNCTION 'HRVE_CONVERT_TIME'

EXPORTING

type_time = 'B' " A = 24小时制 -> 12小时制 B = 12小时制 -> 24小时制

input_time = lv_in_time

input_am_pm = 'PM'

IMPORTING

output_time = lv_out_time

output_am_pm = lv_am_pm

EXCEPTIONS

parameter_error = 1

OTHERS = 2.

WRITE:/ | Input Time - { lv_in_time }|. " 输出:060000

WRITE:/ |Output Time - { lv_out_time }|. " 输出:180000

获取所有的月份名字信息

DATA return_code TYPE sy-subrc.

DATA month_names TYPE STANDARD TABLE OF t247.

CALL FUNCTION 'MONTH_NAMES_GET'

EXPORTING

language = sy-langu "系统当前语言

IMPORTING

return_code = return_code "返回 SY-SUBRC

TABLES

month_names = month_names "返回月份信息

EXCEPTIONS

month_names_not_found = 1

OTHERS = 2.

month_names 明细内容:

获取所有的星期名字

DATA return_code TYPE sy-subrc.

DATA weekday TYPE STANDARD TABLE OF t246.

CALL FUNCTION 'WEEKDAY_GET'

EXPORTING

language = sy-langu "系统当前语言

IMPORTING

return_code = return_code "返回 SY-SUBRC

TABLES

weekday = weekday "返回星期名字信息

EXCEPTIONS

weekday_not_found = 1

OTHERS = 2.

weekday 内容明细:

查看日期属性 包括:该日期是星期几,第几天,是否公共假期等;

公共假期等内容需要输入国家日历。

DATA: year_of_valid_from TYPE scal-year,

year_of_valid_to TYPE scal-year,

return_code TYPE sy-subrc.

DATA day_attributes TYPE STANDARD TABLE OF casdayattr.

CALL FUNCTION 'DAY_ATTRIBUTES_GET'

EXPORTING

factory_calendar = ' ' "工厂日历ID

holiday_calendar = ' ' "假期日历ID

date_from = '20140101' "开始日期

date_to = '20140110' "截止日期

language = sy-langu "系统当前语言

non_iso = ' '

IMPORTING

year_of_valid_from = year_of_valid_from

year_of_valid_to = year_of_valid_to

returncode = return_code

TABLES

day_attributes = day_attributes "返回日期每日属性

EXCEPTIONS

factory_calendar_not_found = 1

holiday_calendar_not_found = 2

date_has_invalid_format = 3

date_inconsistency = 4

OTHERS = 5.

day_attributes 内容明细:

为 F4 帮助显示日历,弹出日历对话框,供用户选择日期

PARAMETERS:p1(6) TYPE c.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p1.

DATA:l_date TYPE sy-datum.

CALL FUNCTION 'F4_DATE'

EXPORTING

date_for_first_month = sy-datum

IMPORTING

select_date = l_date "用户选择后返回的日期

EXCEPTIONS

calendar_buffer_not_loadable = 1

date_after_range = 2

date_before_range = 3

date_invalid = 4

factory_calendar_not_found = 5

holiday_calendar_not_found = 6

parameter_conflict = 7

OTHERS = 8.

显示效果:

为 F4 帮助显示时间,弹出时间对话框,供用户选择时间

PARAMETERS:p1(6) TYPE c.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p1.

DATA: l_time TYPE sy-uzeit.

CALL FUNCTION 'F4_CLOCK'

EXPORTING

start_time = sy-uzeit

display = ' '

IMPORTING

selected_time = l_time.

效果显示:

为 F4 帮助显示月份:弹出选择年和月的对话框

PARAMETERS: p_year TYPE mard-lfgja DEFAULT sy-datum+0(4),

p_month TYPE mard-lfmon.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_month.

DATA: actual_month LIKE isellist-month,

selected_month LIKE isellist-month,

return_code TYPE sy-subrc.

CONCATENATE p_year sy-datum+4(2) INTO actual_month.

CALL FUNCTION 'POPUP_TO_SELECT_MONTH'

EXPORTING

actual_month = actual_month "传入年份

factory_calendar = ' ' "工厂日历 ID

holiday_calendar = ' ' "假日日历 ID

language = sy-langu "当前系统语言

start_column = 8 "弹出框屏幕位置

start_row = 5 "弹出框屏幕位置

IMPORTING

selected_month = selected_month "返回用户输入月份

return_code = return_code "返回 sy-subrc

EXCEPTIONS

factory_calendar_not_found = 1

holiday_calendar_not_found = 2

month_not_found = 3

OTHERS = 4.

IF return_code = 0.

p_year = selected_month+0(4).

p_month = selected_month+4(2).

ENDIF.

效果显示:

弹出选择周的对话框

DATA: begin_date TYPE sy-datum,

end_date TYPE sy-datum.

CALL FUNCTION 'POPUP_CALENDAR_SDB'

EXPORTING

sel_day = 'X' "启用天 选择

sel_week = 'X' "启用周 选择

sel_month = 'X' "启用月 选择

sel_interval = 'X'

focus_day = sy-datum "默认选择日期

IMPORTING

begin_date = begin_date "返回选择周第一天

end_date = end_date. "返回选择周最后一天

效果显示:

获得当前的财政年(Fiscal year)

DATA: currm TYPE bkpf-monat,

curry TYPE bkpf-gjahr,

prevm TYPE bkpf-monat,

prevy TYPE bkpf-gjahr.

CALL FUNCTION 'GET_CURRENT_YEAR'

EXPORTING

bukrs = '3010' "输入公司代码

date = sy-datum "输入日期

IMPORTING

currm = currm "当前会计期间

curry = curry "当前会计年度

prevm = prevm "上期会计期间

prevy = prevy. "上期会计年度

更新日志:

2015-11-23 新增 HRVE_CONVERT_TIME 函数

2014-03-06 发布文章

参考文章:


版权声明:本文为weixin_36366239原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。