Data parsowania w różnych strefach czasowych
Nawet z około 15 latami w Javie zawsze natrafiamy na temat obsługi dat i godzin ...
Oto sytuacja: otrzymuję znacznik czasu z jakiegoś zewnętrznego systemu jakoString
reprezentacja. Semantyczny znacznik czasu oznacza, że reprezentuje datę UTC. Ten znacznik czasu należy umieścić w obiekcie, a następnie w bazie danych PostgreSQL w aTIMESTAMP
pole. Dodatkowo muszę umieścić ten sam znacznik czasu jako czas lokalny (w moim przypadku CEST) w obiekcie, a następnie w bazie danych wTIMESTAMP WITH TIME ZONE
pole.
Jaki jest właściwy sposób upewnienia się, że niezależnie od ustawień komputera wykonującego kod, znaczniki czasu są poprawnie przechowywane w encji (w celu dokonania pewnych walidacji z innymi znacznikami czasu UTC) iw bazie danych (aby użyć ich później w raportach na)?
Oto kod, który działał dobrze na moim lokalnym komputerze:
<code>SimpleDateFormat sdfUTC = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); sdfUTC.setTimeZone(TimeZone.getTimeZone("UTC")); Date utcTimestamp = sdfUTC.parse(utcTimestampString); // getMachinesTimezone is some internal util method giving the TimeZone object of the machines Location Calendar localTimestamp = new GregorianCalendar(getMachinesTimezone()); localTimestamp.setTimeInMillis(utcTimestamp.getTime()); </code>
Ale podczas wykonywania tego samego kodu na serwerze, wynikało to z różnych czasów, więc zakładam, że nie jest to właściwy sposób na jego obsługę. Jakieś sugestie?
PS: Czytałem o Joda Time podczas wyszukiwania na tym forum, ale w danym projekcie nie jestem w stanie wprowadzić nowych bibliotek, ponieważ zmieniam tylko istniejący moduł, więc muszę żyć ze standardowym JDK1.6