Отправка даты и часового пояса с сервера GAE клиенту GWT

Хорошо, ребята, я занимаюсь этой проблемой уже около 2 недель, пробуя все, что могу придумать, и просматривая здесь тонны ответов, которые чувствуют, что они собираются ответить на нее, но я просто не могу понять, как я должен это делать. делать то, что я пытаюсь сделать, и это сводит меня с ума! Кажется, ни у кого нигде нет ответа, повсюду есть половинчатые ответы, но, похоже, ни один из них на самом деле не делает то, что мне нужно, наверняка КТО-ТО решил эту проблему раньше! Пожалуйста, извините за ДЕЙСТВИТЕЛЬНО длинный вопрос, но важно, чтобы вопрос был задан правильно, чтобы ответы действительно отвечали потребностям! :Д

Также, пожалуйста, не утруждайте себя чтением дальше, если вы, вероятно, предоставите какой-либо ответ, который не принимает во внимание, что моим хранилищем данных/сервером является Google App Engine (GAE ), а мой клиент написан в Google Web Toolkit (GWT )и все написано на Java, я ничего не знаю ни о Python, ни о MySQL, ни о PHP, ни о чем-то подобном

Наконец, если кто-нибудь знает о лучшем месте, где можно разобраться с подобными вещами, ПОЖАЛУЙСТА, дайте мне знать, поскольку я продолжаю сталкиваться с подобными проблемами и понятия не имею, как найти решение, кроме как здесь, или тратить часы и часы на поиск в Google. для кого-то, кто уже успел в этом разобраться. Я также не понимаю, как понять что-либо из JavaDocs -извините, но пока кто-нибудь не объяснит мне это, я просто не пойму

У меня есть дата и время, хранящиеся на сервере (в UTC, очевидно ). Я также сохранил на сервере часовой пояс для каждого владельца бизнеса, хранящийся в виде строки (, например"America/New_York").Эта строка получается с помощью java.util.TimeZone.getAvailableIDs()на сервере и получения владельцем бизнеса выбора соответствующего часового пояса для своего бизнеса (по умолчанию "Europe/London"если они ничего не выбирают -не нужно зацикливаться на этот бит )Мне нужно передать любые даты и время обратно на клиентский ПК в какой-то момент в будущем, ИГНОРИРУЯ локальный часовой пояс на их ПК, потому что дата и время должны отображаться в соответствии с часовым поясом владельца бизнеса.

Так, например, владелец бизнеса является парикмахером в Лондоне, и у них есть онлайн-расписание встреч, которое может просмотреть любой их потенциальный клиент. Один из этих клиентов (также в Лондоне )хочет записаться на прием, видит свободное место в 9:00 по московскому времени в понедельник, 3 сентября, и бронирует его.

Затем это сохраняется в хранилище данных как время UTC (, которое на самом деле равно 08:00, поскольку BST — это UTC+1 ), и, конечно же, владелец бизнеса выбрал "Europe/London"в качестве своего часового пояса. Пока все в порядке.

СЕЙЧАС, в какой-то момент в будущем, клиент находится на деловой встрече в Нью-Йорке и понимает, что на следующей неделе у него назначена встреча на стрижку в Лондоне, и они хотят перенести ее на неделю, поэтому они пытаются ПОСМОТРЕТЬ встречу (в книге записей парикмахеров ), но они не хотят видеть ее в 4 утра по нью-йоркскому времени, они хотят видеть ее в 9 утра по британскому времени.

Итак, моя проблема заключается в том, что когда клиент нажимает «Просмотреть встречи» 3 сентября, сервер может отправить обратно дату и время UTC 0800 и строку идентификатора java.util.TimeZone"Europe/London"

Но поскольку на клиенте я могу использовать только

com.google.gwt.i18n.client.TimeZone

это не позволяет мне использовать функцию

TimeZone bizTimeZone=TimeZone.getTimeZone("Europe/London")
(which works for `java.util.TimeZone`)

так как это вызывает ошибку

"The method getTimeZone(String) is undefined for the type TimeZone"

он предлагает изменить его на

com.google.gwt.i18n.client.TimeZone.createTimeZone("Europe/London")

но эта версия ожидает пример "объекта" (GWT com.google.gwt.i18n.client.TimeZoneConstants, показанный в конце этого сообщения ), а не простую строку, которую примет java.util.TimeZone.createTimeZone().

Я могу создать это, используя:

final TimeZoneConstants constTz = GWT.create(TimeZoneConstants.class);
final TimeZone timeZoneCali = TimeZone.createTimeZone(constTz.europeLondon());

Но я не знаю, как это сделать, когда я начинаю с "Europe/London"и/или я не знаю, как сохранить этот объект в базе данных App Engine, а затем получить его позже.

Между прочим, среди закомментированного текста я также пытался использовать следующие строки:

//Calendar tmad = new GregorianCalendar(TimeZone.getTimeZone("Europe/London"));
//Calendar cal = Calendar.getInstance(someTimeZone);
//DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//df1.setTimeZone(TimeZone.getTimeZone("Europe/London"));
//final TimeZone timeZoneClient = TimeZone.createTimeZone("Europe/London");
//dtf.format(date,timeZoneClient)

ДОЛЖЕН быть стандартный способ сделать это КОНЕЧНО, я действительно не могу быть первым человеком, которому когда-либо приходилось решать эту проблему!

constTz.europeLondon()={"transitions": [19394, 60, 24770, 0, 28130, 60, 33506, 0, 36866, 60, 42242, 0, 45602, 60, 50978, 0, 54506, 60, 59714, 0, 63242, 60, 68450, 0, 71978, 60, 77354, 0, 80714, 60, 86090, 0, 89450, 60, 94826, 0, 98521, 60, 103561, 0, 107257, 60, 112297, 0, 115993, 60, 121033, 0, 124729, 60, 129937, 0, 133633, 60, 138673, 0, 142369, 60, 147409, 0, 151105, 60, 156145, 0, 159841, 60, 164881, 0, 168577, 60, 173785, 0, 177313, 60, 182521, 0, 186217, 60, 191257, 0, 194953, 60, 199993, 0, 203689, 60, 208729, 0, 212425, 60, 217465, 0, 221161, 60, 226201, 0, 230065, 60, 235105, 0, 238801, 60, 243841, 0, 247537, 60, 252577, 0, 256273, 60, 261481, 0, 265009, 60, 270217, 0, 273745, 60, 278953, 0, 282649, 60, 287689, 0, 291385, 60, 296425, 0, 300121, 60, 305329, 0, 308857, 60, 314065, 0, 317593, 60, 322801, 0, 326329, 60, 331537, 0, 335233, 60, 340273, 0, 343969, 60, 349009, 0, 352705, 60, 357913, 0, 361441, 60, 366649, 0, 370177, 60, 375385, 0, 379081, 60, 384121, 0, 387817, 60, 392857, 0, 396553, 60, 401593, 0, 405289, 60, 410497, 0, 414025, 60, 419233, 0, 422761, 60, 427969, 0, 431665, 60, 436705, 0, 440401, 60, 445441, 0, 449137, 60, 454345, 0, 457873, 60, 463081, 0, 466609, 60, 471817, 0, 475513, 60, 480553, 0, 484249, 60, 489289, 0, 492985, 60, 498025, 0, 501721, 60, 506929, 0, 510457, 60, 515665, 0, 519193, 60, 524401, 0, 528097, 60, 533137, 0, 536833, 60, 541873, 0, 545569, 60, 550777, 0, 554305, 60, 559513, 0, 563041, 60, 568249, 0, 571777, 60, 576985, 0, 580681, 60, 585721, 0, 589417, 60, 594457, 0], "names": ["GMT", "Greenwich Mean Time", "BST", "British Summer Time"], "id": "Europe/London", "std_offset": 0}

6
задан johnvdenley 16 August 2012 в 14:21
поделиться