powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Про даты и таймзону.
16 сообщений из 16, страница 1 из 1
Про даты и таймзону.
    #37744681
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Нашёл такую интересную фигню.
Есть сервер на linux и клиент на винде. Везде таймзоны в системе и яве
обновлены.

На обоих стоит таймзона Samara.
Фишка её в том, что года 4 назад у нас летом было GMT+5, зимой GMT+4,
потом сделали +4/+3 а теперь +4/+4. В общем- чёрт ногу сломит.

Если на сервере создать дату, например, 5.05.2005 0:00:00 и передать её
на клиент, то приедет 4.05.2005 23:00:00.

В отладчике нашёл, что на сервере создаётся 5.05.2005 0:00:00 GMT+5, а
на клиенте получается 4.05.2005 23:00:00 GMT+4. Т.е. на сервере есть
память о том, какой часовой пояс был в Самаре в 2005м году, а на клиенте
нет.

Вот интересно- это чья бага? Почему на линуксе есть версия таймзон, а на
винде нет? Или она там короткая? И кто виноват- ОС или ява?

PS: возможно это воспроизведётся в MSK зона для зимних дат.

PPS: да, пришлось перевести хранение дат типа "дата рождения" на
LocalDate (правда joda-time не стал использовать, а написал свой аналог).

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37744759
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara,

Каким образом дата передается? Что если на клиенте создать такую дату(а не передавать), какой результат?
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37744772
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, OOsalivan!

> Каким образом дата передается?

Через RMI. В частности, JBoss'овский клиент.

> Что если на клиенте создать такую дату(а не передавать), какой результат?

В пределах одного компьютера проблем нет.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37744848
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara,
Если
> В пределах одного компьютера проблем нет.
> Через RMI. В частности, JBoss'овский клиент.
То проблема явно при передаче объекта.

Через какой объект(ы) с датами работаете?
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37744860
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, OOsalivan!

>> В пределах одного компьютера проблем нет.
>> Через RMI. В частности, JBoss'овский клиент.
> То проблема явно при передаче объекта.

Я об этом написал сначала :)

> Через какой объект(ы) с датами работаете?

Смотрю отладчиком значение даты перед возвратом из последнего
Statless-bean метода и после возврата в вызвавший метод.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37745078
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara
> Через какой объект(ы) с датами работаете?

Смотрю отладчиком значение даты перед возвратом из последнего
Statless-bean метода и после возврата в вызвавший метод.
--
Алексей
JID: alxt@ya.ru


Так а какой объект (java - класс для работы с датами ) у вас хранит дату?
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37745099
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, OOsalivan!

> Так а какой объект (java - класс для работы с датами ) у вас хранит дату?

java.util.Date
В нём вызывается метод normalize, который и творит сие непотребство :)

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37745136
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraДобрый день, OOsalivan!

> Так а какой объект (java - класс для работы с датами ) у вас хранит дату?

java.util.Date
В нём вызывается метод normalize, который и творит сие непотребство :)

--
Алексей
JID: alxt@ya.ru


Так откуда вообще тогда таймзона у вас берется:) ? Объект java.util.Date сам по себе не хранит никакой информации о таймзонах, если вам нужна таймзона то используйте объект Calendar или храните ее отдельно в java.util.TimeZone. А то что вам в дебаге показывает - это скорее всего работа метода toString для данного обьекта, могу предположить что таймзона берется из системы
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37745164
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, OOsalivan!

>> java.util.Date
>> В нём вызывается метод normalize, который и творит сие непотребство :)
> Так откуда вообще тогда таймзона у вас берется:) ? Объект java.util.Date
> сам по себе не хранит никакой информации о таймзонах,

Он не содержит.
Но после создания даты всё же в какой-то момент вызывается normalize()
который берёт текущую информацию о таймзоне и на основе её записывает
данные в GMT с учётом часового пояса в данном месте (т.е.
TimeZone.getDefaultRef()) в год, в котором записана дата.

На клиенте же она то ли не учитывает историйность даты (т.е. бага JRE),
то ли этой историйности нет в системе- в общем смещение берётся другое.

> А то что вам в дебаге показывает - это скорее всего
> работа метода toString для данного обьекта, могу предположить что
> таймзона берется из системы

Да, normalize() вызывается в toString. Но судя по тому, что (ошибочное)
поведение не меняется - не отладкой я всё меняю. Т.е. .toString() на
сервере и клиенте отличаются.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37745205
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara,

Т.е логика вашего приложения завязана на toString представление объекта Date, которое в свою очередь берет таймзону из операционной системы. Мне кажется это не совсем удачное решение. Можно отдебажить на клиенте и сервере и сравнить, что за таймзоны возвращают ОСы и как далее интерпретируются в toString возвращаемые значения
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37745227
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OOsalivanGKS_Samara,

Т.е логика вашего приложения завязана на toString представление объекта Date, которое в свою очередь берет таймзону из операционной системы. Мне кажется это не совсем удачное решение. Можно отдебажить на клиенте и сервере и сравнить, что за таймзоны возвращают ОСы и как далее интерпретируются в toString возвращаемые значения
Почему сразу только toString()? getDate и getHours (точные названия не помню) тоже должны возвращать разные значения.

Атору темы. Я боролся с аналогичным, но на уровне web-служб. Проблему решил путем установки у XMLGregorionCalendar timeZone в значение Undefined. После этого преобразование в date и работа с hibernate происходит без учета временной зоны.
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37745289
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvOOsalivanGKS_Samara,

Т.е логика вашего приложения завязана на toString представление объекта Date, которое в свою очередь берет таймзону из операционной системы. Мне кажется это не совсем удачное решение. Можно отдебажить на клиенте и сервере и сравнить, что за таймзоны возвращают ОСы и как далее интерпретируются в toString возвращаемые значения
Почему сразу только toString()? getDate и getHours (точные названия не помню) тоже должны возвращать разные значения.

Атору темы. Я боролся с аналогичным, но на уровне web-служб. Проблему решил путем установки у XMLGregorionCalendar timeZone в значение Undefined. После этого преобразование в date и работа с hibernate происходит без учета временной зоны.

Как по вашему связанны таймзоны и методы getDate и getHours ?
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37745361
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OOsalivanКак по вашему связанны таймзоны и методы getDate и getHours ?


Вызовом normalize() :)
На самом деле таймзона лезет постоянно изо всех щелей.
Т.е. отменить вызов normalize() я не смог.

OOsalivanПроблему решил путем установки у XMLGregorionCalendar timeZone в
значение Undefined.

Мне что-то страшно такое делать. LocalDate решило проблему.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37745395
Фотография dmitriyche
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraМне что-то страшно такое делать. LocalDate решило проблему.


Этот http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html ?
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37745407
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, dmitriyche!

> Этот
> < http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html>http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html?

Почти. У себя написал похожее (мапится на DATE, у них что-то не нашёл
этого).

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Про даты и таймзону.
    #37746015
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_SamaraOOsalivanКак по вашему связанны таймзоны и методы getDate и getHours ?


Вызовом normalize() :)
На самом деле таймзона лезет постоянно изо всех щелей.
Т.е. отменить вызов normalize() я не смог.

OOsalivanПроблему решил путем установки у XMLGregorionCalendar timeZone в
значение Undefined.

Мне что-то страшно такое делать. LocalDate решило проблему.

--
Алексей
JID: alxt@ya.ru


Правильно:), только эти методы Deprecated.
На самом деле если вы используете Date и вам нужно его строковое представление, то можно использовать либо getTime() либо конвертировать через Calendar
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Про даты и таймзону.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]