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