2009-10-13 16 views
8

I necesidad de dividir la fecha ABAP comoABAP ¿cómo escribir una fecha como un texto largo?

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

El "01" y "2009" son triviales, pero ¿cómo puedo obtener el nombre del mes (que debería ser localizados)?

¿Hay una función para hacer eso?

Si no existe tal función, ¿quizás una tabla con los nombres de los meses?

Respuesta

7

Puede obtener el nombre del mes en un idioma determinado utilizando la función del módulo 'MONTH_NAMES_GET', pasando el idioma como parámetro. El día (domingo, por ejemplo) también se puede obtener usando 'RH_GET_DATE_DAYNAME'

Guillaume

0

Usted puede utilizar un FM simple '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

Creo que la forma más simple absoluta sería aplicar la conversión sale de LDATE a su campo de fecha. Lo más fácil es llamar al módulo de función CONVERSION_EXIT_LDATE_OUTPUT.

Esto sería, por ejemplo, convertir

20090101 

a

01. January 2009 

(A menos que se necesita tener en realidad el día, texto mes y año en cuerdas separadas, que se parecen indicar. De todos modos, tal vez ayudará a alguien más).

3

Este código le dará la fecha en el formato de texto largo como '02 de diciembre de 2011'. Puede cambiar el código según corresponda para imprimir la fecha con el nombre MES largo.

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 

y otros métodos para obtener otro formato de la fecha son

  • Utilización de la sentencia WRITE

     data: get_date(10). "field to store output date 
    
    • Convierte fecha de la savia de 20.130.901 a 01.09. 2013

      write sy-datum to get_date dd/mm/yyyy. 
      
    • Convierte la fecha de SAP de 20130901 a 01.09.13

      write sy-datum to get_date dd/mm/yy. 
      
    • Usando técnicas de manipulación de datos

      data: get_date(8). "field to store output date 
      
    • Convierte fecha de SAP de 20130901 a 01092013

       get_date(2) = sy-datum+6(2). 
          get_date+2(2) = sy-datum+4(2). 
          get_date+4(4) = sy-datum(4). 
      
    • módulos de función usando

      data: get_date(8). "field to store output date 
      
    • Convierte la fecha de 20.130.901 a 01SEP2013

      get_date = sy-datum. 
      

      llamada a la función 'CONVERSION_EXIT_IDATE_OUTPUT'

       EXPORTING 
      
          input   = get_date 
      
           IMPORTING 
      
          OUTPUT  = get_date. 
      

      estos todos los formatos que se pueden utilizar para las fechas/mes específicos y el año

1

Normalmente, también puede exportar la fecha al formato de fecha específico del país de nivel de planta:

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. 

creo que es útil.

-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. 
Cuestiones relacionadas