Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

convert date

Former Member
0 Likes
8,260

Hello,

is there a function module to convert dates from the format YYYYMMDD to DD.MM.YYYY?

Also from system format to the german format?

Regards

Philipp

1 ACCEPTED SOLUTION
Read only

JozsefSzikszai
Active Contributor
0 Likes
3,487

hi Philipp,

you can use FM CONVERSION_EXIT_PDATE_OUTPUT. This will always convert from system format (YYYYMMDD) to actual user format (whatever set for the user, actually using the program). If you want to convert to a constant format, than it is better to use CONCATENATE:

CONCATENATE sy-datum6(2) sy-datum4(2) sy-datum(4) INTO ... SEPARATED BY '.'.

hope this helps

ec

10 REPLIES 10
Read only

Former Member
0 Likes
3,487

There is an easy way of handling it..

declare a variable of format char10 and write that date in to this..

Read only

Former Member
0 Likes
3,487

Hi,

Use FM CONVERSION_EXIT_SDATE_INPUT.

Thanks,

Sriram POnna.

Read only

JozsefSzikszai
Active Contributor
0 Likes
3,488

hi Philipp,

you can use FM CONVERSION_EXIT_PDATE_OUTPUT. This will always convert from system format (YYYYMMDD) to actual user format (whatever set for the user, actually using the program). If you want to convert to a constant format, than it is better to use CONCATENATE:

CONCATENATE sy-datum6(2) sy-datum4(2) sy-datum(4) INTO ... SEPARATED BY '.'.

hope this helps

ec

Read only

Former Member
0 Likes
3,487

Hi Philipp.

I would like to suggest you a reference which is the same as your case,

[SDN Wiki - Standard Reference - Code Gallery - FUNCTION MODULE FOR CONVERTING DATE INTO THE GIVEN FORMAT |https://www.sdn.sap.com/irj/sdn/wiki?path=/display/snippets/function%2bmodule%2bfor%2bconverting%2bdate%2binto%2bthe%2bgiven%2bformat]

I would like to suggest that even, you can refer to,

CONVERT_DATE_TO_INTERN_FORMAT Converts a date to internal format

PDOT_DATE_CONVERT Convert date (yyyymmdd >dd.mm.yyyy)

Hope that's usefull.

Good Luck & Regards.

Harsh Dave

Read only

Former Member
0 Likes
3,487

Hello,

Try this.

REPORT ZTEST.

DATA : V_DATE LIKE SY-DATUM,

V_DATE1(10).

V_DATE = '20070101'.

CONCATENATE V_DATE6(2) V_DATE4(2) V_DATE+0(4) INTO V_DATE1.

WRITE : V_DATE1.

Some of the FM are used are:

HR_HK_CONV_DATE_TO_INTN_FORMA

PT_IAC_GET_DATE_FORMAT

CONVERT_DATE_TO_INTERN_FORMAT

VALIDATE_BILLING_FORMAT

HRGPBS_HESA_DATE_FORMAT

HRGPBS_TPS_DATE_FORMAT

CONVERT_DATE_FORMAT

SLS_MISC_GET_USER_DATE_FORMAT

SPP02_SET_DATEFORMAT

Regards,

Mohammed

Read only

Former Member
0 Likes
3,487

Data: lv_date type sy-datum,

lv_newdate type char10.

lv_date = sy-datym.

( lv_date consists of '20080718')

WRITE lv_date TO lv_newdate DDMMYY.

write:/ lv_date.

Output

18.07.2008

*********************************

... DD/MM/YY | MM/DD/YY

| DD/MM/YYYY | MM/DD/YYYY

| DDMMYY | MMDDYY

| YYMMDD

Effect: These additions influence the output of data objects of the data type d. In all other data types, the addition is ignored.

The content of a data object of type d is interpreted as a valid date in the format YYYYMMDD and is output as follows for the individual additions:

DD/MM/YY and MM/DD/YY:

Both additions have the same effect. The date output has a two-digit year value and a separator. The separator and the order are taken from the definition for date output in the user master record.

DD/MM/YYYY und MM/DD/YYYY:

Both additions have the same effect. The date output has a four-digit year value and separator. The separator and the order are taken from the definition for date output in the user master record.

DDMMYY und MMDDYY:

Both additions have the same effect. The date output has a two-digit year value and no separator. The order is taken from the definition for date output in the user master record.

YYMMDD:

This addition provides a date output with a two-digit year value without a separator in the format YYMMDD.

If the output length is defined implicitly or specified using len, this is used. If it is too short, the edited output is cut off to the right. If the output length is specified using * or **, it is set to the length of the specified edit mask (6, 8, or 10).

Regards,

Ramesh.

Read only

Former Member
0 Likes
3,487

Hi convert like this..

DATA v_date(10).

WRITE itab-date TO v_date DD/MM/YYYY.

u vl get 20080718 format to 18.07.2008

Read only

vinod_vemuru2
Active Contributor
0 Likes
3,487

Hi,

Check this FM CONVERSION_EXIT_PDATE_OUTPUT.

Alternate way is

DATA: date1 TYPE sy-datum VALUE sy-datum,

date2(10) TYPE c.

WRITE date1 TO date2.

Above two will give the date as per user settings.

If u always want in dd.mm.yyyy then better use concatenate statement.

CONCATENATE date1+6(2) date1 4(2) date10(4) INTO date2 SEPARATED BY '.'.

Thanks,

Vinod.

Read only

RoySayak
Active Participant
0 Likes
3,487

Hi Philipp,

Please try with this FM's:

> CONVERT_DATE_FORMAT

Or you can create your own FM's as per the requirement, here is a code snippets for your reference:

function z_convert_date_format.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(INPUT_FORMAT) TYPE  CHAR11 DEFAULT 'YYYYMMDD'
*"     VALUE(DATE) TYPE  CHAR11
*"     VALUE(OUT_FORMAT) TYPE  CHAR11 DEFAULT 'YYYYMMDD'
*"  EXPORTING
*"     VALUE(OUT_DATE) TYPE  CHAR11
*"  EXCEPTIONS
*"      MONTH_ERROR
*"      INVALID_INPUT_FORMAT
*"      DATE_FORMAT_MISMATCH
*"      INVALID_MONTH
*"      INVALID_DAY
*"      INVALID_OUTPUT_FORMAT
*"----------------------------------------------------------------------
  data: v_day type char4,
        v_month type char4,
        v_year type char4,
        v_delimiter1 type char1,
        v_delimiter2 type char1,
        v_space type char1 value ' '.

  if date is initial.
    date = sy-datum.
  endif.

  if input_format is initial or input_format eq 'DD.MM.YYYY' or input_format eq 'DD-MM-YYYY' OR  INPUT_FORMAT EQ 'DD/MM/YYYY'.

    V_DELIMITER1 = DATE+2(1).
    V_DELIMITER2 = DATE+5(1).


    IF V_DELIMITER2 EQ V_DELIMITER1 AND ( V_DELIMITER1 = '/' OR V_DELIMITER1 = '.' OR V_DELIMITER1 = '-' ).

      v_day = date+0(2).
      v_month = date+3(2).
      v_year = date+6(4).

      perform validate_date using v_day v_month v_year.
    else.
      raise date_format_mismatch.
    endif.


  elseif input_format eq 'MM/DD/YYYY' or input_format eq 'MM-DD-YYYY' or input_format eq 'MM.DD.YYYY'.

    V_DELIMITER1 = DATE+2(1).
    V_DELIMITER2 = DATE+5(1).

    IF V_DELIMITER2 EQ V_DELIMITER1 AND  ( V_DELIMITER1 = '/' OR V_DELIMITER1 = '.' OR V_DELIMITER1 = '-' ).
      v_month = date+0(2).
      v_day = date+3(2).
      v_year = date+6(4).

      perform validate_date using v_day v_month v_year.
    else.
      raise date_format_mismatch.
    endif.

  elseif   input_format eq 'YYYY.MM.DD' or input_format eq 'YYYY/MM/DD' OR INPUT_FORMAT EQ 'YYYY-MM-DD'.

    v_delimiter1 = date+4(1).
    v_delimiter2 = date+7(1).
    if v_delimiter2 eq v_delimiter1 and  ( v_delimiter1 = '/' or v_delimiter1 = '.' OR V_DELIMITER1 = '-').
      V_DAY = DATE+8(2).
      V_MONTH = DATE+5(2).
      V_YEAR = DATE+0(4).

      PERFORM VALIDATE_DATE USING V_DAY V_MONTH V_YEAR.
    ELSE.
      RAISE DATE_FORMAT_MISMATCH.
    ENDIF.

  ELSEIF   INPUT_FORMAT EQ 'ddmmyyyy'.

    V_DELIMITER1 = DATE+2(1).
    V_DELIMITER2 = DATE+4(1).
    IF V_DELIMITER1 = '/' OR V_DELIMITER1 = '.' OR V_DELIMITER1 = '-' OR V_DELIMITER1 = ' ' OR
       v_delimiter2 = '/' or v_delimiter2 = '.' or v_delimiter2 = '-' or v_delimiter2 = ' '.
      RAISE DATE_FORMAT_MISMATCH.
    ELSE.
      V_DAY = DATE+0(2).
      V_MONTH = DATE+2(2).
      V_YEAR = DATE+4(4).

      PERFORM VALIDATE_DATE USING V_DAY V_MONTH V_YEAR.

    ENDIF.

  ELSEIF   INPUT_FORMAT EQ 'mmddyyyy'.
    V_DELIMITER1 = DATE+2(1).
    V_DELIMITER2 = DATE+4(1).
    IF V_DELIMITER1 = '/' OR V_DELIMITER1 = '.' OR V_DELIMITER1 = '-' OR V_DELIMITER1 = ' ' OR
       v_delimiter2 = '/' or v_delimiter2 = '.' or v_delimiter2 = '-' or v_delimiter2 = ' '.
      RAISE DATE_FORMAT_MISMATCH.
    ELSE.
      V_MONTH = DATE+0(2).
      V_DAY = DATE+2(2).
      V_YEAR = DATE+4(4).

      PERFORM VALIDATE_DATE USING V_DAY V_MONTH V_YEAR.
    ENDIF.

  ELSEIF   INPUT_FORMAT EQ 'yyyymmdd'.

    V_DELIMITER1 = DATE+4(1).
    V_DELIMITER2 = DATE+7(1).
    IF V_DELIMITER1 = '/' OR V_DELIMITER1 = '.' OR V_DELIMITER1 = '-' OR V_DELIMITER1 = ' ' OR
       v_delimiter2 = '/' or v_delimiter2 = '.' or v_delimiter2 = '-' or v_delimiter2 = ' '.
      RAISE DATE_FORMAT_MISMATCH.
    ELSE.
      V_MONTH = DATE+4(2).
      V_DAY = DATE+6(2).
      V_YEAR = DATE+0(4).

      PERFORM VALIDATE_DATE USING V_DAY V_MONTH V_YEAR.
    ENDIF.

  ELSEIF   INPUT_FORMAT EQ 'yyyyddmm'.

    V_DELIMITER1 = DATE+4(1).
    V_DELIMITER2 = DATE+7(1).
    IF V_DELIMITER1 = '/' OR V_DELIMITER1 = '.' OR V_DELIMITER1 = '-' OR V_DELIMITER1 = ' ' OR
       v_delimiter2 = '/' or v_delimiter2 = '.' or v_delimiter2 = '-' or v_delimiter2 = ' '.
      RAISE DATE_FORMAT_MISMATCH.
    ELSE.
      V_MONTH = DATE+6(2).
      V_DAY = DATE+4(2).
      V_YEAR = DATE+0(4).

      PERFORM VALIDATE_DATE USING V_DAY V_MONTH V_YEAR.
    ENDIF.

  ELSEIF   INPUT_FORMAT EQ 'dd mon yyyy' OR INPUT_FORMAT EQ 'dd,mon yyyy'.
    V_DELIMITER1 = DATE+2(1).
    V_DELIMITER2 = DATE+6(1).
    IF V_DELIMITER1 NE ' ' OR V_DELIMITER1 NE ',' OR V_DELIMITER2 NE ' ' .
      RAISE DATE_FORMAT_MISMATCH.
    ELSE.
      V_MONTH = DATE+3(3).
      V_DAY = DATE+0(2).
      V_YEAR = DATE+7(4).

      PERFORM VALIDATE_DATE USING V_DAY V_MONTH V_YEAR.

      PERFORM CONVERT_MONTH_DIGIT CHANGING V_MONTH.

    ENDIF.

  ELSE.
    RAISE INVALID_INPUT_FORMAT.
  ENDIF.

  IF OUT_FORMAT IS INITIAL .

    OUT_DATE = DATE.

  ELSEIF  OUT_FORMAT EQ 'dd/mm/yyyy'.

    CONCATENATE V_DAY V_MONTH V_YEAR INTO OUT_DATE SEPARATED BY '/'.

  ELSEIF  OUT_FORMAT EQ 'dd.mm.yyyy'.

    CONCATENATE V_DAY V_MONTH V_YEAR INTO OUT_DATE SEPARATED BY '.'.

  ELSEIF  OUT_FORMAT EQ  'dd-mm-yyyy'.

    CONCATENATE V_DAY V_MONTH V_YEAR INTO OUT_DATE SEPARATED BY '-'.

  ELSEIF OUT_FORMAT EQ 'mm/dd/yyyy' .

    CONCATENATE V_MONTH V_DAY V_YEAR INTO OUT_DATE SEPARATED BY '/'.
  ELSEIF OUT_FORMAT EQ   'mm-dd-yyyy'.

    CONCATENATE V_MONTH V_DAY V_YEAR INTO OUT_DATE SEPARATED BY '-'.

  ELSEIF   OUT_FORMAT EQ 'yyyy.mm.dd' .

    CONCATENATE  V_YEAR V_MONTH V_DAY INTO OUT_DATE SEPARATED BY '.'.

  ELSEIF   OUT_FORMAT EQ  'yyyy/mm/dd' .

    CONCATENATE  V_YEAR V_MONTH V_DAY INTO OUT_DATE SEPARATED BY '/'.

  ELSEIF   OUT_FORMAT EQ 'yyyy-mm-dd'.

    CONCATENATE  V_YEAR V_MONTH V_DAY INTO OUT_DATE SEPARATED BY '-'.

  ELSEIF   OUT_FORMAT EQ 'ddmmyyyy'.

    CONCATENATE  V_DAY V_MONTH V_YEAR INTO OUT_DATE .

  ELSEIF   OUT_FORMAT EQ 'mmddyyyy'.

    CONCATENATE  V_MONTH V_DAY  V_YEAR INTO OUT_DATE .


  ELSEIF   OUT_FORMAT EQ 'yyyymmdd'.

    CONCATENATE  V_YEAR V_MONTH V_DAY INTO OUT_DATE .

  ELSEIF   OUT_FORMAT EQ 'yyyyddmm'.
    CONCATENATE  V_YEAR V_DAY V_MONTH   INTO OUT_DATE .

  ELSEIF   OUT_FORMAT EQ 'dd mon yyyy'.

    PERFORM MONTH_CONVERT CHANGING V_MONTH.


    CONCATENATE  V_DAY V_MONTH  V_YEAR INTO OUT_DATE SEPARATED BY SPACE.

  ELSEIF   OUT_FORMAT EQ 'dd,mon yyyy'.

    PERFORM MONTH_CONVERT CHANGING V_MONTH.
    CONCATENATE  V_DAY ',' V_MONTH INTO OUT_DATE .
    CONCATENATE OUT_DATE V_YEAR INTO OUT_DATE SEPARATED BY SPACE.

  ELSE.

    RAISE INVALID_OUTPUT_FORMAT.

  ENDIF.

Best Regards,

Sayak...

Read only

Former Member
0 Likes
3,487

Hi Philipp,

Try the FM

  • CONVERSION_EXIT_PDATE_OUTPUT * this converts date in SAP format i.e. YYYYMMDD into DD.MM.YYYY.

Hope this solves it.

Reward points if this helps.

Thanks,

Hitesh K