Convertir Epix Time Unix en date et heure MSZ

Est-ce que quelqu’un parmi vous a des suggestions pour convertir l’horodatage Unix en heure et date ABAP MEZ / MESZ?

Le code suivant provient de la référence ABAP, le code concerne les horodatages d’une longueur de 15 ou 21, mais l’horodatage Unix comporte actuellement 10 chiffres.

DATA: time_stamp TYPE timestamp, tz TYPE ttzz-tzone. tz = 'MESZ'. time_stamp = 15319830890000. CONVERT TIME STAMP time_stamp TIME ZONE tz INTO DATE DATA(dat) TIME DATA(tim) DAYLIGHT SAVING TIME DATA(dst). cl_demo_output=>write( |{ dat DATE = ISO } { tim TIME = ISO } { dst }| ). time_stamp = 15319830890000. CONVERT TIME STAMP time_stamp TIME ZONE tz INTO DATE dat TIME tim DAYLIGHT SAVING TIME dst. cl_demo_output=>write( |{ dat DATE = ISO } { tim TIME = ISO } { dst }| ). cl_demo_output=>display( ). 

J’ai résolu le problème avec ce code. J’utilise maintenant 13 chiffres epoche …

  data: i(20) type n. data: d type sy-datum." data: t type sy-uzeit. data: epoche type int8. data: test type int8. data: test2 type int8. epoche = 1522836000000. i = epoche / 1000. d = '19700101'. d = d + i div 86400. t = i mod 86400. write: d, t. 

Si vous souhaitez convertir en utilisant un fuseau horaire SAP, celui-ci peut également fonctionner (pas le temps de le convertir en objects ABAP):

 FORM unixtime_2_date_time USING i_unixtime TYPE numeric i_timezone TYPE timezone CHANGING e_date TYPE d e_time TYPE t. DATA l_tstmp_unix_era TYPE TZNTSTMPL. DATA l_tstmp TYPE TZNTSTMPL. CONSTANTS utc TYPE timezone value IS INITIAL. CONVERT DATE '19700101' TIME '000000' INTO TIME STAMP l_tstmp_unix_era TIME ZONE utc. l_tstmp = CL_ABAP_TSTMP=>add( tstmp = l_tstmp_unix_era secs = i_unixtime ). CONVERT TIME STAMP l_tstmp TIME ZONE i_TIMEZONE INTO DATE e_date TIME e_time . ENDFORM. 

Vous pouvez utiliser la classe utilitaire Java cl_pco_utility pour cela, en particulier la méthode convert_java_timestamp_to_abap . Il accepte parfaitement le temps Unix à 10 caractères.

 CLASS zcl_epoch DEFINITION. PUBLIC SECTION. CLASS-METHODS: unix_time_to_timestamp IMPORTING iv_timestamp TYPE timestamp. ENDCLASS. CLASS zcl_epoch IMPLEMENTATION. METHOD unix_time_to_timestamp. CONSTANTS: c_tzone TYPE ttzz-tzone VALUE 'CET'. DATA: lv_timestamp_msec TYPE ssortingng, lv_timestamp TYPE timestamp, lv_date TYPE datum, lv_time TYPE uzeit. lv_timestamp_msec = iv_timestamp * 1000. cl_pco_utility=>convert_java_timestamp_to_abap( EXPORTING iv_timestamp = lv_timestamp_msec IMPORTING ev_date = lv_date ev_time = lv_time ). lv_timestamp = lv_date && lv_time. CONVERT TIME STAMP lv_timestamp TIME ZONE c_tzone INTO DATE lv_date TIME lv_time. cl_demo_output=>display( |{ lv_date DATE = ISO } { lv_time TIME = ISO }| ). ENDMETHOD. ENDCLASS. START-OF-SELECTION. zcl_epoch=>unix_time_to_timestamp( '1532196799' ). 

Il convient de mentionner que MEZ / MSEZ ne sont PAS des abréviations standard et ne doivent pas être utilisées. Par exemple, MEZ est identique à CET. Regardez la liste des fuseaux horaires communs ici ou ici .

En outre, il est préférable de suivre la liste des fuseaux horaires disponibles de votre système, qui est la table TTZZ.