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

questionAnswers(3)

yourAnswerToTheQuestion