![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: 1 Всего: 3 |
Доброго времени суток!
В моей программе сервлет вытаскивает с БД PostgreSQL данные типа Timestamp without TZ. Эти данные пересылаются на клиента в JSON в формате микросекунд с 1970 года.
Данные в БД лежат в UTC. getTime() возвращает время тоже в UTC. Проблема в том, что при размещении кода на сервере в другом часовом поясе количество микросекунд отличается от нашего часового пояса, хотя getTime() по документации возвращает UTC. Почему так происходит? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Потому что это:
полная ересь! Если сервер тоже на Java, то просто передавай long с милисекундами. Если нет то читай эту тему. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: 1 Всего: 3 |
Прощу прощения. не то прислал.
Приведенный выше код использовал для попыток понять, как оно работает. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Если на двух серверах одновременно вызвать System.currentTimeMillis() то они должны вернуть одинаковые значения. Если это не так, то надо проверить: 1. Время на серверы выставлено точно. 2. Часовые пояса в системе и JVM указанны верно. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
amigooo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
В базе у вас по сути long, такой каким вы его положили, при вытаскивании никакого другого способа как использовать local timezone у драйвера нету, потом этот лонг в из local timezone вы видите в UTC преобразованным.
либо устанавливайте timezone в jvm, либо используйте getTimestamp(int columnIndex, Calendar cal) либо другой тип данных для базы. Это сообщение отредактировал(а) amigooo - 19.5.2010, 14:17 |
|||
|
||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: 1 Всего: 3 |
в базе у меня Timestamp without TZ. по сути лежит там UTC. Я вытаскиваю миллисекунды с помощью
и на серверах в разных часовых поясах этот метод для одного и того же значения из БД покажет разные значения |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Откуда такая уверенность что там лежит время в UTC? Тип поля в базе какой Timestamp или Number? Скорее всего драйвер трактует Timestamp СУБД как время в локальной зоне сервера. Т.е. из базы читается время в неком внутреннем формате, преобразуется в компоненты (год, месяц, день и т.д.) а дальше с помощью Calendar получается long и из него уже создается java.sql.Timestamp. А Calendar по умолчанию как раз и использует локальную TZ. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: 1 Всего: 3 |
Тип поля Timestamp. А уверенность, потому что я туда кладу время в UTC и лежит там UTC
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ты кладешь туда java.sql.Timestamp который не имеет TimeZone. У сервера какая TimeZone установлена?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
amigooo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |