【转自http://www.cnblogs.com/VerySky/articles/2226862.html】
通过 Function Module 将外部日期转换为内部日期
所属 Function Group : SCON
所属 Package : SZP
DATA:date_input TYPE c LENGTH 10 VALUE ’2009-1-16′,
date_output TYPE sy-datum.
CALL FUNCTION ‘CONVERT_DATE_INPUT’
EXPORTING
input = date_input
plausibility_check = ‘X’
IMPORTING
output = date_output "output前是否检查数据合理性
EXCEPTIONS
plausibility_check_failed = 1
wrong_format_in_input = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
WRITE:’date_input:’,date_input,’date_output:’,date_output.
结果:date_input: 2009-1-16 date_output: 2009-01-16
————
注意:
1、在R3 4.71 使用时会提示:函数模块 CONVERT_DATE_INPUT 已过时 – 无法使用
2、如果外部日期包含除当前用户日期分割符以外的非数字字符,则报错 WRONG_FORMAT_IN_INPUT ,相关源代码:
*—START
DATE_CHAR-SEP = DATE_SEP.
IF INPUT CN DATE_CHAR.
MESSAGE S012 WITH DATE_SEP RAISING WRONG_FORMAT_IN_INPUT.
ENDIF.
*—END
3、无法处理长度大于10或小于5的外部日期,相关源代码:
*—START
LENGTH = STRLEN( INPUT ).
IF LENGTH GT 10
OR LENGTH LT 5.
MESSAGE S001 WITH DATE_MASK RAISING WRONG_FORMAT_IN_INPUT.
ENDIF.
*—END
4、如果外部日期不包含日期分隔符,且外部日期长度不等于6位或8位时,报错 WRONG_FORMAT_IN_INPUT
*—START
IF INPUT CS DATE_SEP.
SW_SEP = ‘X’.
ELSE.
SW_SEP = SPACE.
IF LENGTH NE 6 " Jahr auffuellen
AND LENGTH NE 8.
MESSAGE S001 WITH DATE_MASK RAISING WRONG_FORMAT_IN_INPUT.
ENDIF.
ENDIF.