2012-04-03 15 views
5

qualcuno di voi ha suggerimenti su come convertire un determinato timestamp UTC in data e ora del fuso orario del sistema?Come convertire un timestamp UTC in data e ora del sistema in ABAP

Conversione da un timestamp UTC al utenti fuso orario locale è facile, si può solo fare:

CONVERT TIME STAMP lv_utc_timestamp TIME ZONE sy-zonlo 
      INTO DATE lv_local_date TIME lv_local_time. 

Ma come si fa per l'ora del sistema - è necessario ora del sistema in molte situazioni per esempio quando si chiama il modulo funzione JOB_CLOSE. L'unica soluzione sono venuto finora è così:

SELECT SINGLE * FROM TTZCU INTO ls_ttzcu. 
CONVERT TIME STAMP lv_utc_timestamp TIME ZONE ls_ttzcu-tzonesys 
      INTO DATE lv_system_date TIME lv_system_time. 

È questo già la soluzione migliore o può il fuso orario del sistema essere recuperata in un altro modo? C'è sempre un fuso orario valido da aspettarsi dalla voce nella tabella TTZCU? Qualche idea?

UPDATE: @rmtiwari suggerito su Twitter, che la bandiera FLAGACTIVE di TTZCU dovrebbe anche essere controllato, in modo che la dichiarazione modificata sarebbe

SELECT SINGLE * FROM TTZCU INTO ls_ttzcu WHERE flagactive = abap_true. 
CONVERT TIME STAMP lv_utc_timestamp TIME ZONE ls_ttzcu-tzonesys 
      INTO DATE lv_system_date TIME lv_system_time. 

UPDATE2: ho trovato un altro modo, che è probabilmente la migliore:

cl_abap_tstmp=>systemtstmp_utc2syst(
      EXPORTING utc_tstmp = lv_utc_timestamp 
      IMPORTING syst_date = lv_system_date " System Date 
         syst_time = lv_system_time " System Time 
      ). 
+0

Mi piace la tua soluzione finale. Se ha risolto il tuo problema, dovresti copiarlo in una risposta. Dopo un paio di giorni sarai in grado di contrassegnarlo come risposta corretta. – Esti

risposta

8

il modo migliore sembra essere:

cl_abap_tstmp=>systemtstmp_utc2syst(
     EXPORTING utc_tstmp = lv_utc_timestamp 
     IMPORTING syst_date = lv_system_date " System Date 
        syst_time = lv_system_time " System Time 
     ). 
Problemi correlati