передача часового пояса с клиента (GWT) на сервер (Joda Time) - PullRequest
7 голосов
/ 28 апреля 2010

Я использую GWT на клиенте (браузер) и Joda Time на сервере. Я хотел бы выполнить некоторые операции поиска в БД, ограниченные днем ​​(т. Е. 00:00:00 до 23:59:59), когда поступает запрос, с временными границами, основанными на часовом поясе пользователя (т. Е. Браузера).

Итак, у меня есть код GWT, который делает new java.util.Date(), чтобы получить время запроса и отправить его на сервер. Тогда я использую Joda Time так:

new DateTime(clientDate).toDateMidnight().toDateTime()

Проблема, конечно, в том, что toDateMidnight() при отсутствии указанной временной зоны будет использовать системную (то есть серверную) временную зону. Я пытался найти простой способ передать TimeZone из браузера на сервер без особой удачи. В GWT я могу получить смещение по Гринвичу:

DateTimeFormat.getFormat("Z").fmt(new Date())

, что приводит к чему-то вроде "-0400". Но Joda Time DateTimeZone.forID() хочет строки, отформатированные как "America / New_York", или целочисленный аргумент часов и минут. Конечно, я могу разобрать «-0400» на -4 часа и 0 минут, но мне интересно, нет ли более простого способа сделать это.

Ответы [ 4 ]

4 голосов
/ 28 апреля 2010

Вы можете использовать метод java.util.Date getTimezoneOffset(). Это устарело, но в настоящее время это довольно обычное явление для обработки дат в GWT.

И AFAIR, вы можете указать что-то похожее на "UTC + 4" во время Joda.

Обновление : Я посмотрел, и это "+04: 00". Или используйте DateTimeZone.forOffsetHours() или даже forOffsetMillis().

1 голос
/ 29 апреля 2010

Gwittir (http://www.gwtsite.com) - это библиотека для GWT, которая включает в себя множество интересных утилит, таких как привязка данных, анимация, отражение и т. Д. Однако, есть и другие интересные плюсы, такие как новая интеграция Joda Time. Если Вы когда-нибудь были разочарованы отсутствием поддержки GWT в java.util.Calendar, вам это понравится, так как это упрощает манипуляции с датами в ваших приложениях.

0 голосов
/ 28 сентября 2010

У меня похожая, но немного другая проблема, я думаю.

Мне действительно нужно хранить часовой пояс клиентов на сервере, чтобы я мог отправлять сообщения о датах, хранящихся в их календаре.

Даты хранятся в UTC по времени в Google App Engine, и, конечно, я могу сохранить текущее смещение часового пояса при создании встречи. Проблема возникает, когда, например, я хочу отправить сводное электронное письмо со списком предстоящих встреч. Эти встречи должны быть компенсированы правильными настройками часового пояса для клиента (я рад предположить, что они все еще находятся в том же часовом поясе, что и при создании встречи).

Настоящая проблема связана с корректировкой перехода на летнее время, поэтому, например, у меня могут быть встречи, записанные на субботу 30 октября 2010 года в 13:00 (BST [GMT + 60]) и понедельник 1 ноября 2010 года в 13:00 (GMT).

Итак, как вы можете себе представить, я не могу просто использовать текущее смещение часового пояса (BST), так как это будет означать, что встреча в понедельник 1 ноября будет указана как 14:00, а не 13:00 (GMT + 60)

Мне приходит в голову, что лучший способ справиться с этим - просто сохранить смещение часового пояса для каждой встречи индивидуально, но я чувствую, что было бы гораздо лучше сначала правильно определить исходный часовой пояс, а затем просто дайте Java сделать правильные настройки.

0 голосов
/ 29 апреля 2010

в противном случае есть другие способы получить смещение часового пояса с помощью + & -.

import java.util.TimeZone;

использование: TimeZone.getDefault (). GetRawOffset ()

эта функция будет возвращать время смещения в миллисекундах относительно вашего телефона. Например, GMT-04: 00 равно (-4) * 60 * 60 * 1000 = -14400000.

После некоторых операций, чтобы получить номер, который вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...