2009-10-13 8 views
8

J'ai besoin de diviser la date de ABAP commeABAP comment écrire une date comme un long texte?

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

Le « 01 » et « 2009 » sont insignifiants, mais comment puis-je obtenir le nom du mois (qui devrait être localisé)?

Y at-il une fonction pour faire cela?

S'il n'y a pas une telle fonction, peut-être une table avec des noms de mois?

Répondre

7

Vous pouvez obtenir le nom du mois dans une langue donnée en utilisant la fonction de module 'MONTH_NAMES_GET', en passant la langue en paramètre. Le jour (dimanche par exemple) peut également être obtenue en utilisant « RH_GET_DATE_DAYNAME »

Guillaume

0

Vous pouvez utiliser un simple 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

Je pense que la façon la plus simple absolue serait d'appliquer la conversion exit LDATE à votre champ de date. Le plus simple est d'appeler le module de fonction CONVERSION_EXIT_LDATE_OUTPUT.

Ceci par exemple convertir

20090101 

à

01. January 2009 

(À moins que vous devez avoir en fait le jour, le texte du mois et l'année dans les chaînes distinctes, que vous semblez indiquer. Quoi qu'il en soit, peut-être que cela aidera quelqu'un d'autre).

3

Ce code vous donnera la date au format texte long comme '02 décembre 2011'. Vous pouvez modifier le code en conséquence pour imprimer la date avec le nom 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 

et d'autres méthodes pour obtenir un autre format de la date sont

  • Utilisation de l'instruction ECRITURE

     data: get_date(10). "field to store output date 
    
    • Converti date de SAP 20.130.901 à 01,09. 2013

      write sy-datum to get_date dd/mm/yyyy. 
      
    • Convertit la date SAP de 20130901 à 01.09.13

      write sy-datum to get_date dd/mm/yy. 
      
    • Utilisation des techniques de manipulation de données

      data: get_date(8). "field to store output date 
      
    • Converti date de SAP de 20130901 à 01092013

       get_date(2) = sy-datum+6(2). 
          get_date+2(2) = sy-datum+4(2). 
          get_date+4(4) = sy-datum(4). 
      
    • Utilisation des modules de fonction

      data: get_date(8). "field to store output date 
      
    • Converti Date de 20.130.901 à 01SEP2013

      get_date = sy-datum. 
      

      APPEL FONCTION 'CONVERSION_EXIT_IDATE_OUTPUT'

       EXPORTING 
      
          input   = get_date 
      
           IMPORTING 
      
          OUTPUT  = get_date. 
      

      ces tous les formats que vous pouvez utiliser pour les dates/mois et de l'année

1

Normalement, vous pouvez également exporter la date au format de date spécifique au pays au niveau de l'installation:

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. 

je pense qu'il est utile.

-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. 
Questions connexes