2013-10-12 2 views
3

В программе лестницы, я получаю со стороны клиента на определенную дату, например:Joda DateTime to java.sql.Timestamp игнорировать часовой пояс?

2013-10-20T23:59:59.999Z

и я действительно хочу, чтобы сохранить эту дату при сохранении в БД, а не конвертировать в местный, так этой строке:

debug("--sql timestamp: " + new Timestamp(reading.timestamp.getMillis()))

печатает из: 2013-10-21 02:59:59.999 (я в Румынии).

Есть ли способ игнорировать часовой пояс?

ответ

2

Это Timestamp.toString() поведение. java.sql.Timestamp распространяет java.util.Date и в своем методе toString() использует, в частности, super.getHours(), который, according to javadoc, возвращает часы, которые интерпретируются в местной часовой пояс - точно так же, как вы это видите.

Однако внутренне Timestamp сохраняет правильное значение временной метки. Однако могут быть проблемы с его хранением в базе данных. См. this ответ.

2

2013-10-20T23:59:59.999Z и 2013-10-21 02:59:59.999 фактически то же самое время: 2013-10-20T23:59:59.999Z находится в UTC time zone (Z), а второй является относительным, и выражали в виде локального часового пояса (UTC + 3, то в Румынии).

В PostgreSQL вы должны хранить свои метки времени как TIMESTAMP WITH TIME ZONE (TIMESTAMPTZ) в своей базе данных, чтобы справиться с этим. Вы всегда сможете распечатать его позже в выбранном вами часовом поясе (например, в формате UTC). (Вас может заинтересует this recent question, чтобы понять, почему относится к типу хранения.)

Если вы хотите распечатать временную метку в часовом поясе UTC/Z, то new DateTime(millis, DateTimeZone.UTC) должен помочь (с использованием времени Джоды).

Смежные вопросы