2009-10-13 6 views
8

мне нужно разделить дату ABAP какABAP как написать дату в виде длинного текста?

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

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

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

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

ответ

7

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

Гийом

0

Вы можете использовать простой 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. 
2

Я думаю, что абсолютный простой способ был бы применить выход преобразования LDATE в поле даты. Самый простой способ - вызвать функциональный модуль CONVERSION_EXIT_LDATE_OUTPUT.

Это, например, преобразовать

20090101 

в

01. January 2009 

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

3

Этот код даст вам дату в длинном текстовом формате, например «02 декабря 2011 года». Вы можете изменить код, чтобы напечатать дату с длинным именем MONTH.

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
* 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 в 01SEP2013

      get_date = sy-datum. 
      

      вызов функции 'CONVERSION_EXIT_IDATE_OUTPUT'

       EXPORTING 
      
          input   = get_date 
      
           IMPORTING 
      
          OUTPUT  = get_date. 
      

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

1

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

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. 
-2
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. 

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

-1
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.