Frage

Ich brauche ABAP Datum aufzuspalten wie

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

Die „01“ und „2009“ sind trivial, aber wie bekomme ich die Monatsnamen (die lokalisiert werden sollen)?

Gibt es eine Funktion, das zu tun?

Wenn es keine solche Funktion, vielleicht eine Tabelle mit Monatsnamen?

War es hilfreich?

Lösung

Sie können den Namen des Monats bekommen in einer bestimmten Sprache mit der ‚MONTH_NAMES_GET‘ Modulfunktion, die Sprache als Parameter übergeben. Der Tag (Sonntag zum Beispiel) kann auch ‚RH_GET_DATE_DAYNAME

erhalten werden unter Verwendung von

Guillaume

Andere Tipps

Dieser Code wird Ihnen das Datum im Langtext-Format wie ‚02 Dezember 2011‘. Sie können den Code ändern entsprechend das Datum mit langen Monatsnamen zu drucken.

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.

Ich denke, der absolute einfachste Weg wäre, den Konvertierungs-Exit LDATE zu Ihrem Datumsfeld anzuwenden. Am einfachsten zu Call Funktionsbaustein CONVERSION_EXIT_LDATE_OUTPUT.

Dies würde zum Beispiel convert

20090101

01. January 2009

(Es sei denn, Sie brauchen, um tatsächlich den Tag, Monat und Jahr Text in separaten Strings haben, die Sie scheinen zu zeigen. Wie auch immer, vielleicht wird es jemand anderes helfen).

* 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

und andere Methoden, anderes Format des Datums zu erhalten sind

  • Mit der Anweisung WRITE

            data: get_date(10).  "field to store output date
    
    • Wandelt SAP Datum von 20130901 bis 01.09.2013

          write sy-datum to get_date dd/mm/yyyy.
      
    • Wandelt SAP Datum von 20130901 bis 01.09.13

          write sy-datum to get_date dd/mm/yy.
      
    • Mit den Daten Manipulationstechniken

      data: get_date(8).  "field to store output date
      
    • Wandelt SAP Datum 20130901 bis 01092013

           get_date(2)   = sy-datum+6(2).
           get_date+2(2) = sy-datum+4(2).
           get_date+4(4) = sy-datum(4).
      
    • Mit Funktionsmodule

          data: get_date(8).  "field to store output date
      
    • Wandelt Datum von 20130901 bis 01SEP2013

          get_date   = sy-datum.
      

      CALL FUNCTION 'CONVERSION_EXIT_IDATE_OUTPUT'

             EXPORTING
      
        input         = get_date
      
              IMPORTING
      
           OUTPUT        = get_date.
      

      diese alle Formate, die Sie für die jeweilige können Termine / Monat und Jahr

Normalerweise können Sie auch das Datum in das landesspezifischen Datumsformat Werksebene exportieren:

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.

Sie können ein einfaches FM 'MONTH_NAMES_GET' verwenden

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

Ich denke, es ist sinnvoll.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top