Enviar una fecha y una zona horaria desde el servidor GAE al cliente GWT

Muy bien, he estado repasando este problema durante aproximadamente 2 semanas, probando todo lo que puedo pensar y viendo un montón de respuestas aquí que parece que van a responder, pero no puedo entender cómo debo hacerlo. ¡Hago lo que estoy tratando de hacer y me está volviendo absolutamente loco! Nadie parece tener una respuesta en ninguna parte, hay medias respuestas por todas partes, pero ninguna parece realmente hacer lo que necesito que haga, ¡seguramente ALGUIEN ha resuelto este problema antes! Por favor, disculpe la pregunta REALMENTE larga, pero es importante que la pregunta se haga correctamente, ¡para que las respuestas realmente respondan a la necesidad! :RE

Además, no se moleste en seguir leyendo si es probable que proporcione una respuesta que no tenga en cuenta que mi almacén de datos / servidor es Google App Engine (GAE), y que mi cliente está escrito en el Kit de herramientas web de Google (GWT) y todo está escrito en Java, no sé nada acerca de Python o MySQL o PHP ni nada de eso

Finalmente, si alguien sabe de un lugar mejor para resolver este tipo de cosas, POR FAVOR, hágamelo saber ya que se me ocurren temas como este y no tengo idea de cómo encontrar una solución que no sea aquí, o pase horas y horas buscando en google para alguien que ya ha logrado resolverlo. Tampoco entiendo cómo descubrir algo de JavaDocs. Lo siento, pero hasta que alguien me lo explique, no lo voy a entender.

Tengo una fecha y hora almacenada en el servidor (en UTC, obviamente) También he almacenado en el servidor una Zona horaria para cada propietario de empresa almacenada como una cadena (por ejemplo,"America/New_York"). Esta cadena se obtiene mediante el uso dejava.util.TimeZone.getAvailableIDs() en el servidor y hacer que el propietario de la empresa seleccione la zona horaria correspondiente para su negocio (el valor predeterminado es"Europe/London" si no eligen nada, no es necesario que se quede colgado en ese bit). Debo pasar cualquier fecha de datos a la PC del cliente en algún momento en el futuro, e IGNORAR la zona horaria local en su PC, porque la fecha y hora debe ser se muestra de acuerdo con la zona horaria del propietario de la empresa.

Entonces, como ejemplo, el propietario de un negocio es un peluquero en Londres y tiene un calendario de citas en línea que está disponible para ser visto por cualquier cliente potencial. Uno de estos clientes (también en Londres) desea reservar una cita, ve un espacio a las 9 am BST el lunes 3 de septiembre y lo reserva.

Luego se almacena en el almacén de datos como la hora UTC (que en realidad es 0800 ya que BST es UTC + 1) y, por supuesto, el propietario de la empresa ha seleccionado"Europe/London" como su zona horaria. Todo bien hasta ahora.

AHORA, en algún momento en el futuro, el cliente se encuentra en una reunión de negocios en Nueva York, y se da cuenta de que tiene una cita la próxima semana para un corte de cabello en Londres y quiere cambiarla en una semana, por lo que luego intentan VEA la cita (en el libro de citas de los peluqueros), pero no quieren verla a las 4 am hora de Nueva York, quieren verla a las 9 am hora británica.

Entonces, mi problema es que cuando el cliente hace clic para VER las citas el 3 de septiembre, el servidor puede enviar una fecha UTC de 0800 y unajava.util.TimeZone Cadena de ID de"Europe/London"

Pero porque en el cliente solo puedo usar

com.google.gwt.i18n.client.TimeZone

no me permite usar la función

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

ya que causa el error

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

sugiere cambiarlo a

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

Pero esta versión, está esperando un GWT.com.google.gwt.i18n.client.TimeZoneConstants "objeto" (ejemplo mostrado al final de este mensaje) y no la cadena simple que eljava.util.TimeZone.createTimeZone() Va a aceptar.

Puedo crear esto usando:

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

Pero no sé cómo hacer esto cuando estoy empezando con"Europe/London" y / o no sé cómo almacenar este objeto en la base de datos de App Engine y luego recuperarlo más tarde.

Por cierto, entre el texto comentado también he intentado usar las siguientes líneas:

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

DEBE haber una forma estándar de hacer esto DETENIDAMENTE, ¡realmente no puedo ser la primera persona en tener que resolver este problema!

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, 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], "nombres": ["GMT", "Greenwich Mean Time "," BST "," British Summer Time "]," id ":" Europe / London "," std_offset ": 0}

Respuestas a la pregunta(2)

Su respuesta a la pregunta