Разбор даты с разными часовыми поясами
Даже с 15-летним стажем в Java каждый всегда сталкивается с темой обработки дат и времени ...
Вот ситуация: я получаю метку времени от некоторой внешней системы какString
представление. Семантика временной метки состоит в том, что она представляет дату UTC. Эта временная метка должна быть помещена в объект, а затем в базу данных PostgreSQL вTIMESTAMP
поле. Кроме того, мне нужно поместить ту же метку времени, что и местное время (в моем случае CEST) в объект, а затем в базу данных вTIMESTAMP WITH TIME ZONE
поле.
Как правильно гарантировать, что независимо от настроек машины, выполняющей код, временные метки будут правильно храниться в объекте (для выполнения некоторых проверок с другими временными метками UTC) и в базе данных (чтобы использовать их в отчетах позже на)?
Вот код, который отлично работал на моей локальной машине:
<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>
Но при выполнении одного и того же кода на сервере это приводило к разным временам, поэтому я предполагаю, что это неправильный способ его обработки. Какие-либо предложения?
PS: я читал о Joda Time при поиске на этом форуме, но в данном проекте я не могу вводить новые библиотеки, так как я только меняю существующий модуль, поэтому мне приходится жить со стандартным JDK1.6