Ошибка преобразования длинного в метку времени - PullRequest
0 голосов
/ 11 февраля 2012

Я создаю java.sql.Timestamp, используя long.Иногда это получается правильно, а иногда - неправильно!например,

76875 дает метку времени "1970-01-01 01: 01: 16,875"

Откуда взялся дополнительный час?Проблема возникает, а затем исчезает сама по себе, давая:

"1970-01-01 00: 01: 16.875".

В Google appengine работает фрагмент кода, вызывающий проблему.это может что-то испортить с часовыми поясами?Я попытался определить шаблон, но пока не смог.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

Обновление памяти конструктора Timestamp: время - миллисекунды с 1 января 1970 года, 00:00:00 по Гринвичу. Обратите внимание, это GMT .

Так что ничего плохого в "1970-01-01 01: 01: 16.875", я думаю, вы сейчас находитесь в часовом поясе Европы (+1):)

Попробуйте new java.sql.Timestamp(76875).toGMTString(), вы получите "1 января 1970 00:01:16 GMT".

Также вы могли бы сначала позвонить TimeZone.setDefault(TimeZone.getTimeZone("GMT+0:00"));, затем ваша метка времени будет «1970-01-01 00: 01: 16,875».

0 голосов
/ 11 февраля 2012

База данных работает на том же сервере, что и ваше приложение? Разница во часовом поясе кажется наиболее вероятной.

Здесь есть несколько переменных. Попробуйте определить, откуда возникла проблема:

  1. Построить объект Date со значением длинной метки времени - это то, что вы ожидаете?
  2. Определите, в каком часовом поясе находится сервер механизма приложений. Может быть, новый TimeZone (). GetDisplayName ()
  3. Попробуйте использовать java.sql.Date - это ведет себя так же?

Возможно, вы захотите создать для себя таблицу из этих различных объектов даты. Попробуйте разные длинные значения, и для каждого создайте строку java.util.Date, java.sql.Date, java.sql.Timestamp.

...