Проверка корректности даты
Формат типа даты в ABAP имеет следующий вид: YYYYMMDD, где YYYY — год, MM — месяц, DD — день, и представлен в виде текстовой последовательности тип CHAR длинной 8 символов.
В некоторых случаях требуется проверить корректность формата даты:
- содержит только цифровые значения,
- день в промежутке от 01 до 31,
- месяц в промежутке от 01 до 12,
- дата действительно существует.
Все это можно сделать с помощью ФМ-а DATE_CHECK_PLAUSIBILITY:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
DATA: lv_datum TYPE d VALUE '20203102'. CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY' EXPORTING date = lv_datum EXCEPTIONS plausibility_check_failed = 1 OTHERS = 2. IF sy-subrc <> 0. WRITE 'Формат даты не корректный'. ENDIF. |
Хотя, зная как вычисляются выражения с датами в ABAP, всегда можно воспользоваться ими для оценки корректности даты:
1 2 3 4 5 6 |
PARAMETERS: p_date TYPE c LENGTH 8. WRITE COND string( LET lv_d = + CONV d( p_date ) IN WHEN lv_d IS NOT INITIAL THEN 'Дата корректна' ELSE 'Такой даты не существует' ). |
Или воспользоваться присвоением без потерь:
1 2 3 4 5 6 7 |
DATA: lv_str TYPE string. lv_str = '99992311'. IF EXACT d( lv_str ) IS INITIAL. WRITE 'Wrong date'. ENDIF. |