01-31-2006 10:31 PM
I can write some quick code and use the T015M table, but I figure there must be an existing function module. I want to convert a system date to a character string. Ideally, I would like it based on a country field.
20060131 -> January 31, 2006
20060131 -> 31 January 2006
01-31-2006 11:07 PM
Hi Norman,
There is a function module for month names :
MONTH_NAMES_GET
Hope this may help you.
Lanka
01-31-2006 11:07 PM
Hi Norman,
There is a function module for month names :
MONTH_NAMES_GET
Hope this may help you.
Lanka
01-31-2006 11:16 PM
Using a combination of the function module that Lanka has suggested and some coding, you can achieve your result.
I don't have a system in front of me right now, so please bare with the code.
Call the function module MONTH_NAMES_GET to get the name of the month.
Here the field <b>the_month_name</b> is the name of the month coming back from MONTH_NAMES_GET.
data: date_string type string.
data: day_comma type string.
data: the_month(2) type c.
data: it247 type table of t247 with header line.
the_month = sy-datum+4(2).
CALL FUNCTION 'MONTH_NAMES_GET'
exporting
LANGUAGE = SY-LANGU
TABLES
month_names = it247
EXCEPTIONS
MONTH_NAMES_NOT_FOUND = 1
OTHERS = 2.
read table it247 with key mnr = the_month.
the_month_name = it247-ltx.
* Here we put a comma after the day
<b>concatenate sy-datum+6(2) ',' into day_comma.
* here we are building the date string
concatenate the_month_name day_comma sy-datum+0(4)
into date_string separated by space.</b>
Write:/ date_string.
Regards,
Rich Heilman
01-31-2006 11:13 PM
u can try like this
&----
*& Report YCHATEST *
*& *
&----
*& *
*& *
&----
REPORT YCHATEST .
tables : t247.
data:it_t247 type standard table of t247 with header line.
data:v_year(4),
v_month(2),
v_day(2),
v_mon_desc(15),
v_date(35).
v_year = sy-datum+0(4).
v_month = sy-datum+4(2).
v_day = sy-datum+6(2).
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.
read table it_t247 with key mnr = v_month.
v_mon_desc = it_t247-ltx.
concatenate v_day v_mon_desc v_year into v_date SEPARATED BY space.
write : v_date.
02-01-2006 5:31 AM
Hi Norman,
1. Here, we require TWO Things.
2. First : Getting the DATE FORMAT
Second : Getting the month names.
3. For both these,
we have 2 different FMs
4. I have developed one INDEPENDENT FORM/PERFORM,
in which we pass DATE,
and it returns the STRING January 31, 2006
(Based on SETTINGS)
5. use this code (just copy paste in new program)
6.
REPORT abc.
*----
DATA : datestr(25) TYPE c.
PARAMETER : d TYPE sy-datum DEFAULT sy-datum.
PERFORM getmonth USING d datestr.
WRITE 😕 datestr.
*----
FORM
*----
FORM getmonth USING d datestr.
DATA : month_names LIKE t247 OCCURS 0 WITH HEADER LINE.
DATA : m(2) TYPE c.
DATA : dformat(10) TYPE c.
DATA : mname(20) TYPE c.
m = d+4(2).
CALL FUNCTION 'MONTH_NAMES_GET'
EXPORTING
LANGUAGE = SY-LANGU
IMPORTING
RETURN_CODE =
TABLES
month_names = month_names
EXCEPTIONS
month_names_not_found = 1
OTHERS = 2
.
READ TABLE month_names INDEX m.
IF sy-subrc = 0.
mname = month_names-ltx.
ENDIF.
CALL FUNCTION 'SLS_MISC_GET_USER_DATE_FORMAT'
IMPORTING
p_date_format = dformat
EXCEPTIONS
error_reading_user_master = 1
error_reading_date_format_text = 2
OTHERS = 3.
datestr = dformat.
REPLACE 'DD' IN datestr WITH d+6(2).
REPLACE 'MM' IN datestr WITH mname.
REPLACE 'YYYY' IN datestr WITH d(4).
REPLACE ALL OCCURRENCES OF '.' IN datestr WITH ','.
ENDFORM. "getmonth
regards,
amit m.
02-01-2006 12:49 PM
Norman
A simpler solution is to look at the edit masks for date fields, thus:
WRITE SY-DATLO USING EDIT MASK '==LDATE'.
To find the edit mask to use, test the function associated with the mask. The functions have the name format 'CONVERSION_EXIT_ldate_OUTPUT'. (Use the SET command to change country / language.)
MattG.
02-01-2006 1:59 PM
Thanks everyone. Great suggestions. I really thought there would be an existing function module to do this task.
I ended up getting the country date format from T005-DATFM, month name from table T015M, and then formatting as needed.
Thanks again!
02-01-2006 2:11 PM
Hi
Try to see the program use table T247 instead of T015M, for example the fm CONVERSION_EXIT_IDATE_OUTPUT:
it returns the date in this format:
20063101 -> 31JAN2006
Max
02-01-2006 2:49 PM
I liked the idea of the conversion exit and EDIT_MASK, but they want the full month name (January instead of JAN). I could not find an EDIT MASK with the full name. I could replace the short month in table T247 with the long name, but the code seems to be working.
FORM format_date USING P_LV_LAND1 type land1.
data: lv_month_txt type monam,
lv_month type monum,
lv_day(2) type c,
lv_year(4) type n,
lv_datfm type datfm.
clear: gv_date_text,
lv_month_txt.
lv_month = sy-datum+4(2).
lv_day = sy-datum+6(2).
lv_year = sy-datum+0(4).
shift lv_day left deleting leading '0'.
get month text
select single monam into lv_month_txt
from t015m
where spras = sy-langu
and monum = lv_month.
check sy-subrc = 0.
get formatting key for ship-to country
select single datfm into lv_datfm
from t005
where land1 = p_lv_land1.
check sy-subrc = 0.
format based on country format key
case lv_datfm.
DD.MM.YYYY
when '1'.
concatenate lv_day lv_month_txt lv_year
into gv_date_text separated by space.
MM/DD/YYYY or MM-DD-YYYY
when '2' or '3'.
concatenate lv_day gc_comma into gv_date_text.
condense gv_date_text no-gaps.
concatenate lv_month_txt gv_date_text lv_year
into gv_date_text separated by space.
YYYY.MM.DD
when '4'.
concatenate lv_year lv_month_txt lv_day
into gv_date_text separated by space.
default Month DD, YYYY
when others.
concatenate lv_day gc_comma into gv_date_text.
condense gv_date_text no-gaps.
concatenate lv_month_txt gv_date_text lv_year
into gv_date_text separated by space.
endcase.
condense gv_date_text.
ENDFORM. " format_date
02-01-2006 2:54 PM
02-03-2006 10:42 AM
Norman
Strange I've used edit mask LDATE, function CONVERSION_EXIT_LDATE_OUTPUT, and get the full month name.
Anyway, here is a little program to see the outputs for different countries. It does need updating for edit mask MODAT, and checking the return code after select and function calls:
REPORT ZZMATTG004 .
DATA: D8(20),
WA_MASK LIKE DD01D-CONVEXIT,
MONTH_NAMES LIKE T247 OCCURS 12 WITH HEADER LINE.
TABLES: T005. "Countries
PARAMETERS: DATE LIKE SY-DATUM DEFAULT SY-DATLO.
SELECT-OPTIONS S_LAND FOR T005-LAND1 NO INTERVALS.
PARAMETERS: P_LANGU AS CHECKBOX DEFAULT 'X'.
D8 = DATE.
DESCRIBE FIELD DATE EDIT MASK WA_MASK.
WRITE: 'MASK IS :- ''', WA_MASK NO-GAP, '''' NO-GAP.
SKIP.
WRITE:
/ DATE DD/MM/YYYY, 22 'DD/MM/YYYY',
/ DATE MM/DD/YYYY, 22 'MM/DD/YYYY',
/ DATE DD/MM/YY , 22 'DD/MM/YY',
/ DATE MM/DD/YY , 22 'MM/DD/YY',
/ DATE DDMMYY , 22 'DDMMYY',
/ DATE MMDDYY , 22 'MMDDYY',
/ DATE YYMMDD , 22 'YYMMDD'.
SKIP.
WRITE:
/ D8 USING EDIT MASK '==LDATE', 'LDATE',
/ D8 USING EDIT MASK '==SDATE', 'SDATE',
/ D8 USING EDIT MASK '==IDATE', 'IDATE',
/ D8 USING EDIT MASK '==D3DAT', 'D3DAT',
/ D8 USING EDIT MASK '==PDATE', 'PDATE',
/ D8 USING EDIT MASK '==INVD1', 'INVD1',
/ D8 USING EDIT MASK '==INVDT', 'INVDT'.
LOOP AT S_LAND.
* BREAK-POINT.
SET COUNTRY S_LAND-LOW.
SELECT SINGLE SPRAS INTO T005-SPRAS FROM T005
WHERE LAND1 = S_LAND-LOW.
IF P_LANGU = 'X'.
SET LANGUAGE T005-SPRAS.
ENDIF.
REFRESH MONTH_NAMES.
CALL FUNCTION 'MONTH_NAMES_GET'
EXPORTING
LANGUAGE = T005-SPRAS
* IMPORTING
* RETURN_CODE =
TABLES
MONTH_NAMES = MONTH_NAMES
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.
* READ TABLE MONTH_NAMES INDEX DATE+4(2).
READ TABLE MONTH_NAMES WITH KEY MNR = DATE+4(2).
SKIP.
WRITE: / 'COUNTRY SET TO', S_LAND-LOW COLOR 2,
/ 'Month name is', MONTH_NAMES-KTX, MONTH_NAMES-LTX,
'Language (T005) is', T005-SPRAS, '(SYST)', SY-LANGU.
WRITE:
/ DATE DD/MM/YYYY, 22 'DD/MM/YYYY',
/ DATE MM/DD/YYYY, 22 'MM/DD/YYYY',
/ DATE DD/MM/YY , 22 'DD/MM/YY',
/ DATE MM/DD/YY , 22 'MM/DD/YY',
/ DATE DDMMYY , 22 'DDMMYY',
/ DATE MMDDYY , 22 'MMDDYY',
/ DATE YYMMDD , 22 'YYMMDD'.
SKIP.
WRITE:
/ D8 USING EDIT MASK '==LDATE', 'LDATE',
/ D8 USING EDIT MASK '==SDATE', 'SDATE',
/ D8 USING EDIT MASK '==IDATE', 'IDATE',
/ D8 USING EDIT MASK '==D3DAT', 'D3DAT',
/ D8 USING EDIT MASK '==PDATE', 'PDATE',
/ D8 USING EDIT MASK '==INVD1', 'INVD1',
/ D8 USING EDIT MASK '==INVDT', 'INVDT'.
ENDLOOP.
SET COUNTRY SPACE.
* SET LANGUAGE T005-SPRAS.
REFRESH MONTH_NAMES.
CALL FUNCTION 'MONTH_NAMES_GET'
EXPORTING
LANGUAGE = SY-LANGU
* IMPORTING
* RETURN_CODE =
TABLES
MONTH_NAMES = MONTH_NAMES
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.
* READ TABLE MONTH_NAMES INDEX DATE+4(2).
READ TABLE MONTH_NAMES WITH KEY MNR = DATE+4(2).
SKIP.
WRITE: / 'COUNTRY SET TO', 'SPACE' COLOR 2,
/ 'Month name is', MONTH_NAMES-KTX, MONTH_NAMES-LTX.
WRITE:
/ DATE DD/MM/YYYY, 22 'DD/MM/YYYY',
/ DATE MM/DD/YYYY, 22 'MM/DD/YYYY',
/ DATE DD/MM/YY , 22 'DD/MM/YY',
/ DATE MM/DD/YY , 22 'MM/DD/YY',
/ DATE DDMMYY , 22 'DDMMYY',
/ DATE MMDDYY , 22 'MMDDYY',
/ DATE YYMMDD , 22 'YYMMDD'.
SKIP.
WRITE:
/ D8 USING EDIT MASK '==LDATE', 'LDATE',
/ D8 USING EDIT MASK '==SDATE', 'SDATE',
/ D8 USING EDIT MASK '==IDATE', 'IDATE',
/ D8 USING EDIT MASK '==D3DAT', 'D3DAT',
/ D8 USING EDIT MASK '==PDATE', 'PDATE',
/ D8 USING EDIT MASK '==INVD1', 'INVD1',
/ D8 USING EDIT MASK '==INVDT', 'INVDT'.
MattG.
02-03-2006 12:57 PM
Thanks Matt. Unfortunately this task is over, the code is in production, and any changes would require several management authorizations.
When I looked at that function module, the text showed JAN as an example. I didn't have much time to experiment. I was only allocated 30 minutes to complete the task (code and test) of changing the date from MM/DD/YY to a full month name in the format of the destination country. Didn't have time to try out many new things.
I saved your code and I'm sure it will come in handy in the future.
Thanks again.