abap获取日期_SAP ABAP 日期,时间 相关函数

获的两个日期之间的分钟数

data min TYPEi.CALL FUNCTION 'DELTA_TIME_DAY_HOUR'

EXPORTINGT1= '060000'T2= '070000'D1= '20160101'D2= '20160101'

IMPORTINGMINUTES=min .

write min.

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

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

TYPE-POOLS: p99sg.DATA: days TYPEi,

weeksTYPEi,

monthsTYPEi,

yearsTYPEi.DATA: month_tab TYPE STANDARD TABLE OFp99sg_month_tab_row.CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES'

EXPORTINGbegda= '20150101' "开始日期

endda = '20160101' "截止日期

IMPORTINGdays= days "返回天数:266

c_weeks = weeks "返回周数:52

c_months = months "返回月数:12

c_years = years "返回年数:1

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

通过函数计算两个日期的差异月份

CALL FUNCTION 'MONTHS_BETWEEN_TWO_DATES_NEW'

EXPORTINGI_DATUM_BIS=I_DATUM_VON=

*I_KZ_INCL_BIS = ' '*I_KZ_VOLLE_MONATE = 'X'

IMPORTINGE_MONATE=

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

CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'

EXPORTINGday_in= '20160101'

IMPORTINGlast_day_of_month= date 20160131

EXCEPTIONSday_in_no_date= 1OTHERS= 2.

CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'

EXPORTINGi_date= '20160101' "输入日期

IMPORTINGe_date= date. 20160131

根据条件获取需要的日期

CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'

EXPORTING

date = '20160101' "日期

days = 10 "天数

months = 0 "月数

signum = '+'years= 0 "年数

IMPORTINGcalc_date= calc_date. (2016.01.11)

CALL FUNCTION 'FIMA_DATE_CREATE'

EXPORTINGI_DATE= '20160101'I_FLG_END_OF_MONTH= ''I_YEARS= 1

*I_MONTHS = 0

I_DAYS = 1

*I_CALENDAR_DAYS = 2

"I_SET_LAST_DAY_OF_MONTH = 'X'

IMPORTINGE_DATE=w_date

E_FLG_END_OF_MONTH=w_flag*E_DAYS_OF_I_DATE = w_days

.

write: w_date,/w_flag,/ w_days.

DATA date TYPE sy-datum.CALL FUNCTION 'MONTH_PLUS_DETERMINE'

EXPORTINGmonths= 3olddate= '20140101' "输入日期

IMPORTINGnewdate= date. "返回日期:20140401

DATA date TYPE sy-datum.CALL FUNCTION 'CCM_GO_BACK_MONTHS'

EXPORTINGcurrdate= '20140101' "输入日期

backmonths = 3 "过去月数

IMPORTINGnewdate= date. "返回日期:20131001

判断是否为假日

CALL FUNCTION 'HOLIDAY_CHECK_AND_GET_INFO'

EXPORTING

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

holiday_calendar_id          = ''        "假日日历 ID

with_holiday_attributes      = ' '         "属性标识

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

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

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

EXCEPTIONScalendar_buffer_not_loadable = 1date_after_range             = 2date_before_range            = 3date_invalid                 = 4holiday_calendar_id_missing  = 5holiday_calendar_not_found   = 6OTHERS                       = 7.

CALL FUNCTION 'HOLIDAY_CHECK_AND_GET_INFO'

EXPORTING

date                = -datum

holiday_calendar_id = 'CN'

IMPORTING

holiday_found       = v_cind.

IF v_cind = ''.

CALL FUNCTION 'DAY_IN_WEEK'

EXPORTING

datum = -datum

IMPORTING

wotnr = v_wotnr.

CASE v_wotnr.

WHEN 6 OR 7.

v_cind = 'X'.

ENDCASE.

ENDIF.

转换日期为内部数字格式

CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'

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

accept_initial_date = ' '

IMPORTINGdate_internal= date "输出20160101

EXCEPTIONSdate_external_is_invalid= 1OTHERS= 2.

转换日期为系统日期格式

CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'

EXPORTINGdate_internal= '20160101'

IMPORTINGdate_external= 2016.01.01

EXCEPTIONSdate_internal_is_invalid= 1OTHERS= 2.

查看日期属性

DATA: year_of_valid_from TYPE scal-year,

year_of_valid_toTYPE scal-year,

return_codeTYPE sy-subrc.DATA day_attributes TYPE STANDARD TABLE OFcasdayattr.CALL FUNCTION 'DAY_ATTRIBUTES_GET'

EXPORTINGfactory_calendar= ' ' "工厂日历ID

holiday_calendar = ' ' "假期日历ID

date_from = '20140101' "开始日期

date_to = '20140110' "截止日期

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

non_iso = ' '

IMPORTINGyear_of_valid_from=year_of_valid_from

year_of_valid_to=year_of_valid_to

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

EXCEPTIONSfactory_calendar_not_found= 1holiday_calendar_not_found= 2date_has_invalid_format= 3date_inconsistency= 4OTHERS= 5.

*获取当前日期是星期几

DATA wotnr TYPEp.CALL FUNCTION 'DAY_IN_WEEK'

EXPORTINGdatum= '20140101' "输入日期

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

*获取当前日期周周一周日的日期

CALL FUNCTION 'GET_WEEK_INFO_BASED_ON_DATE'

EXPORTING

date = sy-datum "'20140101'

IMPORTINGweek= week "返回周数:201401

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

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

DATA date TYPE sy-datum.CALL FUNCTION 'WEEK_GET_FIRST_DAY'

EXPORTINGweek= '201401' "输入周

IMPORTING

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

EXCEPTIONSweek_invalid= 1OTHERS= 2.

F4_DATE 函数

PARAMETERS:p1(6) TYPEc.AT SELECTION-SCREEN ON VALUE-REQUEST FORp1.DATA:l_date TYPE sy-datum.CALL FUNCTION 'F4_DATE'

EXPORTINGdate_for_first_month= sy-datumIMPORTINGselect_date= l_date "用户选择后返回的日期

EXCEPTIONScalendar_buffer_not_loadable= 1date_after_range= 2date_before_range= 3date_invalid= 4factory_calendar_not_found= 5holiday_calendar_not_found= 6parameter_conflict= 7OTHERS= 8.

F4_CLOCK 函数

PARAMETERS:p1(6) TYPEc.AT SELECTION-SCREEN ON VALUE-REQUEST FORp1.DATA: l_time TYPE sy-uzeit.CALL FUNCTION 'F4_CLOCK'

EXPORTINGstart_time= sy-uzeit

display= ' '

IMPORTINGselected_time= l_time.

F4 弹出框的形式选择年月

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

p_monthTYPE mard-lfmon.AT SELECTION-SCREEN ON VALUE-REQUEST FORp_month.DATA: actual_month LIKE isellist-month,

selected_monthLIKE isellist-month,

return_codeTYPE sy-subrc.CONCATENATE p_year sy-datum+4(2) INTOactual_month.CALL FUNCTION 'POPUP_TO_SELECT_MONTH'

EXPORTINGactual_month= actual_month "传入年份

factory_calendar = ' ' "工厂日历 ID

holiday_calendar = ' ' "假日日历 ID

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

start_column = 8 "弹出框屏幕位置

start_row = 5 "弹出框屏幕位置

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

return_code = return_code "返回 sy-subrc

EXCEPTIONSfactory_calendar_not_found= 1holiday_calendar_not_found= 2month_not_found= 3OTHERS= 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_dateTYPE sy-datum.CALL FUNCTION 'POPUP_CALENDAR_SDB'

EXPORTINGsel_day= 'X' "启用天 选择

sel_week = 'X' "启用周 选择

sel_month = 'X' "启用月 选择

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

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

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

12小时制与24小时制的时间转换

DATA: lv_in_time TYPEtims,

lv_out_timeTYPEtims,

lv_am_pmTYPEc.

lv_in_time= '080000'.CALL FUNCTION 'HRVE_CONVERT_TIME'

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

input_time =lv_in_time

input_am_pm= 'PM'

IMPORTINGoutput_time=lv_out_time

output_am_pm=lv_am_pmEXCEPTIONSparameter_error= 1OTHERS= 2.WRITE:/ lv_in_time .

WRITE:/ lv_out_time.

08:00:00

20:00:00

工作计划

HR_ABS_ATT_TIMES_AT_ENTRY

HR_PERSON_READ_WORK_SCHEDULE

日期格式转换

CALL FUNCTION 'FORMAT_DATE_4_OUTPUT'

EXPORTINGDATIN=

FORMAT =

*IMPORTING*DATEX =

.

DATA date2(10) TYPEc.CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'

EXPORTINGdate_internal= '20140101'

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

EXCEPTIONSdate_internal_is_invalid= 1OTHERS= 2.

时间戳

长度 15的 DEC类型,组成为  8位日期 + 6位时间。

把时间和日期转成时间戳

CALL FUNCTION 'CIF_GEN4_CONVERT_DATETIME'

EXPORTINGiv_date=l_datum1

IV_TIME=l_time1

IV_TIMEZONE= SY-ZONLOIMPORTINGEV_TIMESTAMP=l_timestamp1EXCEPTIONSTIME_CONVERSION_FAILED= 1OTHERS= 2.

CALL FUNCTION 'IB_CONVERT_INTO_TIMESTAMP'

EXPORTINGI_DATLO=I_TIMLO=

*I_TZONE = SY-ZONLO*IMPORTING*E_TIMESTAMP =

.

REPORTz_barry_test.TABLES: t001w,adrc .DATA: date LIKE sy-datum,

timeLIKE sy-uzeit,

tstampLIKE tzonref-tstamps.SELECT SINGLE * FROM t001w WHERE werks = '0001'.IF sy-subrc = 0.SELECT SINGLE * FROM adrc WHERE addrnumber = t001w-adrnr . "time_zone

PERFORM date_to_timestamp USING '20080808' '080808' adrc-time_zoneCHANGINGtstamp.WRITEtstamp.ENDIF.IF NOT tstamp IS INITIAL.PERFORM timestamp_to_date USING tstamp adrc-time_zoneCHANGING datetime.WRITE / : date,time .ENDIF.*&---------------------------------------------------------------------**& Form date_to_timestamp*&---------------------------------------------------------------------**日期+时间+时区 转变为 时间戳*----------------------------------------------------------------------*

FORM date_to_timestamp USING i_date LIKE sy-datum

i_timeLIKE sy-uzeit

i_tzoneLIKE tzonref-tzoneCHANGING o_tstamp LIKE tzonref-tstamps .CONVERT DATE i_date TIME i_time INTO TIME STAMP o_tstamp TIMEZONE i_tzone.CASE sy-subrc.

WHEN8.MESSAGE e000(oo) WITH '时区错'.

WHEN12.MESSAGE e000(oo) WITH '时间戳错误'.

WHEN OTHERS.ENDCASE.ENDFORM. "date_to_timestamp

*&---------------------------------------------------------------------**& Form TIMESTAMP_TO_DATE*&---------------------------------------------------------------------**时间戳+时区 转变为 日期和时间*----------------------------------------------------------------------*

FORM timestamp_to_date USING i_tstamp LIKE tzonref-tstamps

i_tzoneLIKE tzonref-tzoneCHANGING o_date LIKE sy-datum

o_timeLIKE sy-uzeit.DATA: w_tzone LIKE tzonref-tzone.

w_tzone=i_tzone.CONVERT TIME STAMP i_tstamp TIME ZONE w_tzone INTO DATE o_date TIMEo_time.CASE sy-subrc.

WHEN8.MESSAGE e000(oo) WITH '时区错'.

WHEN12.MESSAGE e000(oo) WITH '时间戳错误'.

WHEN OTHERS.ENDCASE.ENDFORM. "TIMESTAMP_TO_DATE

把时间戳转成时间和日期

CALL FUNCTION 'CIF_GEN4_CONVERT_TIMESTAMP'

EXPORTINGiv_timestamp=l_timestamp3

IV_TIMEZONE= SY-ZONLOIMPORTINGEV_DATE=l_datum3

EV_TIME=l_time3EXCEPTIONSTIME_CONVERSION_FAILED= 1OTHERS= 2.


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