|
|
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
Добрый день! Нашёл такую интересную фигню. Есть сервер на 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 10:50:02 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
GKS_Samara, Каким образом дата передается? Что если на клиенте создать такую дату(а не передавать), какой результат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 11:31:23 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
Добрый день, OOsalivan! > Каким образом дата передается? Через RMI. В частности, JBoss'овский клиент. > Что если на клиенте создать такую дату(а не передавать), какой результат? В пределах одного компьютера проблем нет. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 11:36:02 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
GKS_Samara, Если > В пределах одного компьютера проблем нет. > Через RMI. В частности, JBoss'овский клиент. То проблема явно при передаче объекта. Через какой объект(ы) с датами работаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 12:10:17 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
Добрый день, OOsalivan! >> В пределах одного компьютера проблем нет. >> Через RMI. В частности, JBoss'овский клиент. > То проблема явно при передаче объекта. Я об этом написал сначала :) > Через какой объект(ы) с датами работаете? Смотрю отладчиком значение даты перед возвратом из последнего Statless-bean метода и после возврата в вызвавший метод. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 12:17:52 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
GKS_Samara > Через какой объект(ы) с датами работаете? Смотрю отладчиком значение даты перед возвратом из последнего Statless-bean метода и после возврата в вызвавший метод. -- Алексей JID: alxt@ya.ru Так а какой объект (java - класс для работы с датами ) у вас хранит дату? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 14:04:24 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
Добрый день, OOsalivan! > Так а какой объект (java - класс для работы с датами ) у вас хранит дату? java.util.Date В нём вызывается метод normalize, который и творит сие непотребство :) -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 14:20:08 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraДобрый день, OOsalivan! > Так а какой объект (java - класс для работы с датами ) у вас хранит дату? java.util.Date В нём вызывается метод normalize, который и творит сие непотребство :) -- Алексей JID: alxt@ya.ru Так откуда вообще тогда таймзона у вас берется:) ? Объект java.util.Date сам по себе не хранит никакой информации о таймзонах, если вам нужна таймзона то используйте объект Calendar или храните ее отдельно в java.util.TimeZone. А то что вам в дебаге показывает - это скорее всего работа метода toString для данного обьекта, могу предположить что таймзона берется из системы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 14:33:49 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
Добрый день, 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 14:44:23 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
GKS_Samara, Т.е логика вашего приложения завязана на toString представление объекта Date, которое в свою очередь берет таймзону из операционной системы. Мне кажется это не совсем удачное решение. Можно отдебажить на клиенте и сервере и сравнить, что за таймзоны возвращают ОСы и как далее интерпретируются в toString возвращаемые значения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 15:01:39 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
OOsalivanGKS_Samara, Т.е логика вашего приложения завязана на toString представление объекта Date, которое в свою очередь берет таймзону из операционной системы. Мне кажется это не совсем удачное решение. Можно отдебажить на клиенте и сервере и сравнить, что за таймзоны возвращают ОСы и как далее интерпретируются в toString возвращаемые значения Почему сразу только toString()? getDate и getHours (точные названия не помню) тоже должны возвращать разные значения. Атору темы. Я боролся с аналогичным, но на уровне web-служб. Проблему решил путем установки у XMLGregorionCalendar timeZone в значение Undefined. После этого преобразование в date и работа с hibernate происходит без учета временной зоны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 15:09:47 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
LeonidvOOsalivanGKS_Samara, Т.е логика вашего приложения завязана на toString представление объекта Date, которое в свою очередь берет таймзону из операционной системы. Мне кажется это не совсем удачное решение. Можно отдебажить на клиенте и сервере и сравнить, что за таймзоны возвращают ОСы и как далее интерпретируются в toString возвращаемые значения Почему сразу только toString()? getDate и getHours (точные названия не помню) тоже должны возвращать разные значения. Атору темы. Я боролся с аналогичным, но на уровне web-служб. Проблему решил путем установки у XMLGregorionCalendar timeZone в значение Undefined. После этого преобразование в date и работа с hibernate происходит без учета временной зоны. Как по вашему связанны таймзоны и методы getDate и getHours ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 15:30:56 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
OOsalivanКак по вашему связанны таймзоны и методы getDate и getHours ? Вызовом normalize() :) На самом деле таймзона лезет постоянно изо всех щелей. Т.е. отменить вызов normalize() я не смог. OOsalivanПроблему решил путем установки у XMLGregorionCalendar timeZone в значение Undefined. Мне что-то страшно такое делать. LocalDate решило проблему. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 15:56:11 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraМне что-то страшно такое делать. LocalDate решило проблему. Этот http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 16:18:47 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
Добрый день, 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2012, 16:25:07 |
|
||
|
Про даты и таймзону.
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraOOsalivanКак по вашему связанны таймзоны и методы getDate и getHours ? Вызовом normalize() :) На самом деле таймзона лезет постоянно изо всех щелей. Т.е. отменить вызов normalize() я не смог. OOsalivanПроблему решил путем установки у XMLGregorionCalendar timeZone в значение Undefined. Мне что-то страшно такое делать. LocalDate решило проблему. -- Алексей JID: alxt@ya.ru Правильно:), только эти методы Deprecated. На самом деле если вы используете Date и вам нужно его строковое представление, то можно использовать либо getTime() либо конвертировать через Calendar ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2012, 01:10:49 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37745407&tid=2132087]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
105ms |
get tp. blocked users: |
2ms |
| others: | 316ms |
| total: | 516ms |

| 0 / 0 |
