Wysyłanie daty i strefy czasowej z serwera GAE do klienta GWT

OK, ludzie, obchodzę ten problem od około 2 tygodni, próbując teraz wszystkiego, co tylko mogę wymyślić i patrząc na mnóstwo odpowiedzi tutaj, które mają ochotę odpowiedzieć na to pytanie, ale nie mogę pojąć, jak mam to zrobić rób to, co staram się robić i to doprowadza mnie absolutnie NUTS! Nikt nigdzie nie ma odpowiedzi, w każdym miejscu jest połowa odpowiedzi, ale żadna z nich nie wydaje się robić tego, czego potrzebuję, na pewno KTOŚ już wcześniej rozwiązał ten problem! Proszę wybaczyć NAPRAWDĘ długie pytanie, ale ważne jest, aby zadać pytanie, aby odpowiedzi rzeczywiście odpowiadały potrzebom! :RE

Również nie przejmuj się czytaniem dalej, jeśli prawdopodobnie udzielisz jakiejkolwiek odpowiedzi, która nie bierze pod uwagę, że mój magazyn danych / serwer to Google App Engine (GAE), a mój klient jest napisany w Google Web Toolkit (GWT) i wszystkim jest napisany w Javie, nie wiem nic na temat Pythona lub MySQL lub PHP lub czegoś podobnego

W końcu, jeśli ktoś wie o lepszym miejscu do tego, aby to zrobić, proszę, daj mi znać, gdy wymyślam takie problemy i nie mam pojęcia, jak znaleźć rozwiązanie inne niż tutaj, lub spędzaj godziny na wyszukiwaniu google dla kogoś innego, kto już to zrozumiał. Nie rozumiem też, jak coś wymyślić z JavaDocs - przepraszam, ale dopóki ktoś mi tego nie wyjaśni, po prostu nie dostanę go

Mam zapisaną na serwerze datę i godzinę (oczywiście w UTC). Przechowuję również na serwerze strefę czasową dla każdego właściciela firmy zapisaną jako ciąg znaków (np."America/New_York"). Ten ciąg jest uzyskiwany za pomocąjava.util.TimeZone.getAvailableIDs() na serwerze i sprawienie, aby właściciel firmy wybrał odpowiednią strefę czasową dla swojej firmy (domyślnie)"Europe/London" jeśli nie wybiorą niczego - nie trzeba się rozłączać na tym bicie) Muszę przekazać wszelkie dane z powrotem do komputera klienckiego w pewnym momencie w przyszłości, IGNORUJĄC lokalną strefę czasową na ich komputerze, ponieważ data musi być wyświetlane zgodnie ze strefą czasową właściciela firmy.

Tak więc na przykład właściciel firmy jest fryzjerem w Londynie i ma harmonogram spotkań online, który jest dostępny dla każdego potencjalnego klienta. Jeden z tych klientów (także w Londynie) chce zarezerwować wizytę, widzi automat o 9 rano BST w poniedziałek 3 września i rezerwuje go.

Jest on następnie przechowywany w magazynie danych, ponieważ czas UTC (który jest w rzeczywistości 0800 jako BST to UTC + 1) i oczywiście właściciel firmy wybrał"Europe/London" jako strefę czasową. Jak dotąd wszystko w porządku.

Teraz, w pewnym momencie w przyszłości, klient jest na spotkaniu biznesowym w Nowym Jorku i zdaje sobie sprawę, że w następnym tygodniu ma umówioną wizytę na strzyżenie w Londynie i chce go przenieść o tydzień, a następnie próbuje ZOBACZ spotkanie (w książce terminów fryzjerskich), ale nie chcą widzieć go jako 4:00 czasu nowojorskiego, chcą go zobaczyć jako 9:00 czasu brytyjskiego.

Więc moim problemem jest to, że gdy klient kliknie, aby zobaczyć WIDZENIA 3 września, serwer może odesłać datę UTC 0800 ijava.util.TimeZone ID String of"Europe/London"

Ale ponieważ na kliencie mogę tylko korzystać

com.google.gwt.i18n.client.TimeZone

nie pozwala mi korzystać z tej funkcji

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

ponieważ powoduje błąd

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

sugeruje zmianę na

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

ale ta wersja oczekuje GWTcom.google.gwt.i18n.client.TimeZoneConstants „obiekt” (przykład pokazany na końcu tego komunikatu), a nie prosty ciąg znakówjava.util.TimeZone.createTimeZone() zaakceptuje.

Mogę to utworzyć, używając:

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

Ale nie wiem, jak to zrobić, kiedy zaczynam od"Europe/London" i / lub nie wiem, jak zapisać ten obiekt w bazie danych App Engine, a następnie pobrać go później.

Nawiasem mówiąc, wśród skomentowanego tekstu próbowałem również użyć następujących linii:

//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)

MUSI BYĆ standardowy sposób robienia tego BEZPIECZNIE, naprawdę nie mogę być pierwszą osobą, która kiedykolwiek będzie musiała rozwiązać ten problem!

constTz.europeLondon () = {"przejścia": [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, 3 92857, 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], „nazwy”: [„GMT”, „Greenwich Średni czas ”,„ BST ”,„ Brytyjski czas letni ”],„ id ”:„ Europa / Londyn ”,„ std_offset ”: 0}

questionAnswers(2)

yourAnswerToTheQuestion