ABAP как написать дату в виде длинного текста? - PullRequest
8 голосов
/ 13 октября 2009

Мне нужно разделить дату ABAP как

     20091101 --> "01", "november", "2009"

«01» и «2009» тривиальны, но как мне получить название месяца (которое должно быть локализовано)?

Есть ли функция для этого?

Если такой функции нет, возможно, таблица с названиями месяцев?

Ответы [ 8 ]

7 голосов
/ 13 октября 2009

Вы можете получить название месяца на данном языке, используя функцию модуля 'MONTH_NAMES_GET', передавая язык в качестве параметра. День (например, воскресенье) также можно получить с помощью 'RH_GET_DATE_DAYNAME'

Гийом

3 голосов
/ 02 декабря 2011

Этот код предоставит вам дату в длинном текстовом формате, например «02 декабря 2011 года». Вы можете изменить код соответствующим образом, чтобы напечатать дату с длинным именем МЕСЯЦА.

DATA: LONG_DATE(20).
PERFORM GET_LONG_DATE USING LONG_DATE.
WRITE: LONG_DATE.

FORM GET_LONG_DATE USING DATE.

DATA: T_MONTH_NAMES LIKE TABLE OF T247 WITH HEADER LINE.

CALL FUNCTION 'MONTH_NAMES_GET'
 EXPORTING
   LANGUAGE     = SY-LANGU
  TABLES
    MONTH_NAMES = T_MONTH_NAMES
  .

DATA: YEAR(4)   TYPE C,
      MONTH(2)  TYPE C,
      DAY(2)    TYPE C.

YEAR = SY-DATUM+(4).
MONTH = SY-DATUM+4(2).
DAY = SY-DATUM+6(2).


READ TABLE T_MONTH_NAMES INDEX ( MONTH ).

CONCATENATE T_MONTH_NAMES-LTX ' ' DAY  INTO DATE SEPARATED BY SPACE.
CONCATENATE DATE ',' INTO DATE.
CONCATENATE DATE YEAR INTO DATE SEPARATED BY SPACE.

WRITE / DATE.

ENDFORM.
2 голосов
/ 29 ноября 2013
* to get full name of the day / month also can use


          GET_MONTH_NAME ... for month and 
            GET_DATE_DAYNAME for the specific day name too

и другие методы получения другого формата даты:

  • Использование оператора WRITE

            data: get_date(10).  "field to store output date
    
    • Преобразует дату SAP с 20130901 по 01.09.2013

          write sy-datum to get_date dd/mm/yyyy.
      
    • Преобразует дату SAP с 20130901 по 01.09.13

          write sy-datum to get_date dd/mm/yy.
      
    • Использование методов обработки данных

      data: get_date(8).  "field to store output date
      
    • Преобразует дату SAP с 20130901 по 01092013

           get_date(2)   = sy-datum+6(2).
           get_date+2(2) = sy-datum+4(2).
           get_date+4(4) = sy-datum(4).
      
    • Использование функциональных модулей

          data: get_date(8).  "field to store output date
      
    • Преобразование даты с 20130901 года по 01 сентября 2013 года

          get_date   = sy-datum.
      

      ФУНКЦИЯ ВЫЗОВА 'CONVERSION_EXIT_IDATE_OUTPUT'

             EXPORTING
      
        input         = get_date
      
              IMPORTING
      
           OUTPUT        = get_date.
      

      все эти форматы, которые вы можете использовать для определенных дат / месяцев и года

2 голосов
/ 07 июля 2011

Я думаю, что самым простым способом было бы применить преобразование LDATE к вашему полю даты. Проще всего вызвать функциональный модуль CONVERSION_EXIT_LDATE_OUTPUT.

Это, например, конвертирует

20090101

до

01. January 2009

(Если вам не нужно фактически указывать день, месяц и год в отдельных строках, которые, как вам кажется, указывают. В любом случае, возможно, это поможет кому-то еще).

1 голос
/ 24 декабря 2013

Обычно вы также можете экспортировать дату в формат даты, специфичный для страны уровня завода:

if w_country is initial.
  select single LAND1
    from T001W
    into w_country
   where WERKS eq w_the_plant.
endif.

SET COUNTRY w_country.

write w_the_date to w_export.
0 голосов
/ 31 января 2018
PARAMETERS: P_1 TYPE SY-DATUM.

DATA : LV_DATE TYPE SY-DATUM,LV_TIME TYPE SY-UZEIT,lv_month type string.
        LV_TIME = SY-UZEIT.

DATA: YEAR(4)   TYPE C,
      MONTH(2)  TYPE C,
      DAY(2)    TYPE C.
      YEAR = P_1+0(4).
      MONTH = P_1+4(2).
      DAY = P_1+6(2).
      IF MONTH = '01'.
      lv_month = 'JAN'.


     ELSEIF Month = '02'.
     lv_month = 'Feb'.
     ELSEIF Month = '03'.
     lv_month = 'Mar'.
     ELSEIF Month = '04'.
     lv_month = 'Apr'.
     ELSEIF Month = '05'.
     lv_month = 'May'.
     ELSEIF Month = '06'.
     lv_month = 'Jun'.
     ELSEIF Month = '07'.
     lv_month = 'Jul'.
     ELSEIF Month = '08'.
     lv_month = 'Aug'.
     ELSEIF Month = '09'.
     lv_month = 'Sep'.
     ELSEIF Month = '10'.
     lv_month = 'Oct'.
     ELSEIF Month = '11'.
     lv_month = 'Nov'.
     ELSEIF Month = '12'.
     lv_month = 'Dec'.
     ENDIF.
   WRITE: '|',day NO-GAP,'-',
  lv_month NO-GAP,'-',year NO-GAP.
0 голосов
/ 14 мая 2014
data : lv_timestamp TYPE string,
         lv_str TYPE STRING.
  concatenate sy-datum sy-uzeit  into lv_timestamp.
concatenate 'C:\Users\Roopa Rani\desktop\header' '_'  lv_timestamp '.txt' INTO FILEPATH.

Я думаю, что это полезно.

0 голосов
/ 12 мая 2011

Вы можете использовать простой FM 'MONTH_NAMES_GET'

CALL FUNCTION 'MONTH_NAMES_GET'
  EXPORTING
    LANGUAGE = SY-LANGU
* IMPORTING
* RETURN_CODE =
  TABLES
    month_names = it_t247
  EXCEPTIONS
    MONTH_NAMES_NOT_FOUND = 1
    OTHERS = 2
.

IF sy-subrc 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
...