Ricevo un datetime da un servizio web SOAP senza informazioni su timzone. Quindi, il deserializzatore dell'Asse assume UTC. Tuttavia, il datetime è davvero all'ora di Sydney. Ho risolto il problema sottraendo l'offset fuso orario:Modifica del fuso orario senza modificare il tempo in Java
Calendar trade_date = trade.getTradeDateTime();
TimeZone est_tz = TimeZone.getTimeZone("Australia/Sydney");
long millis = trade_date.getTimeInMillis() - est_tz.getRawOffset();
trade_date.setTimeZone(est_tz);
trade_date.setTimeInMillis(millis);
Tuttavia, non sono sicuro se questa soluzione prende anche l'ora legale in considerazione. Penso che dovrebbe, perché tutte le operazioni sono in ora UTC. Qualche esperienza con la manipolazione del tempo in Java? Migliori idee su come risolvere questo problema?
ho sempre, sempre, e manipola solo la data (in qualsiasi lingua) utilizzando l'unica unità corretta. Quell'unità è il secondo (o millisecondo). Ci sono minuti con 59 o 61 secondi e ci sono giorni con 23 o 25 ore. Ci sono ore con 60 * 60 +/- 1 secondi, ecc. Tutte le mie date sono memorizzate come (milli) secondi dall'epoca. Ecco come sono nel DB, è così che vengono ordinati. L'unica volta in cui eseguo un fuso orario/aaaa-mm-gg qualunque sia la conversione quando deve essere visualizzata all'utente (o quando si utilizzano API interrotte che non comprendono che una data è espressiva in secondi). – SyntaxT3rr0r
@WizardOfOdds. Questo è il consiglio del suono, ma OP ha chiaramente pubblicato che riceve il timestamp da un servizio web (eventualmente di terze parti) e ha usato una libreria di terze parti per elaborare quella richiesta. Chiaramente ci sono alcune cose fuori dal suo controllo diretto, e la conversione da fuso orario a fuso orario non è sicuramente diretta con java.util.Calendar. –
Grazie per i vostri commenti. Sto generando gli stub del servizio Web dal file WSDL utilizzando Axis. Sto utilizzando le classi generate per connettersi a un servizio web di terze parti. In realtà, dovrebbero trasmettere i campi datetime con le informazioni sul fuso orario o in UTC, che è ciò che si aspetta Axis. Ma non è la mia scelta. –