ABAP, wie ein Datum als Langtext schreiben?
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?
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
‘
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.