Côté Client en charge des fuseaux horaires en GWT
Je suis en train de travailler sur une application GWT où j'ai besoin pour appuyer le scénario suivant:
Le serveur est situé dans le fuseau horaire d'Un
Le navigateur du client est mis à l'heure de la zone B
L'application GWT est configuré pour l'affichage de la date/de l'heure dans le fuseau horaire C
Depuis GWT ne prend pas en charge le Calendrier et la prise en charge native de temps
les zones en javascript est inexistante, je ne peux pas penser à une belle et propre
la solution à ce problème.
N'avez-vous fait quelque chose de similaire ou connaissez-vous un bon
utils je pourrais utiliser?
Merci!
- Comment gérez-Vous un à l'aide d'un autre fuseau horaire que GWT est l'aide?
Vous devez vous connecter pour publier un commentaire.
Dans mon expérience, la meilleure pratique est sensiblement réduit la complexité et de la confusion lorsque vous traitez avec des dates et les fuseaux horaires dans gwt:
Pour votre cas, lorsque vous créez une date sur le Serveur (fuseau horaire A) convertir en millisecondes écoulées depuis l'époque GMT avant de l'envoyer au Client. Sur le client, l'utilisation DateTimeFormat (ou écrire votre propre date formateur util) pour la convertir en soit le fuseau horaire B ou le fuseau horaire C selon le cas.
Vous ne pouvez pas changer le GWT fuseau horaire, par conséquent tous les java.util.Date de a le navigateur le fuseau horaire. Vous aurez besoin pour gérer le courant le fuseau horaire manuellement.
Je vois 3 options:
Vous gérer le fuseau horaire de conversion vous-même.
Vous remplacer le sérialiseur/deserializer de java.util.Date comme dans ce post. Et peut-être l'aide d'un custom java.util.Date implémentation, qui remplace la getTimezoneOffset(). Cette approche nécessite la recompilation de l'API GWT!.
De mettre en œuvre votre propre Date, soit en étendant java.util.Date (comme dans l'option 2) ou en l'enveloppant avec certains fuseau horaire de l'objet. Dans cette option CustomFieldSerializer de l' peut toujours être utile, mais il n'est pas nécessaire de recompiler l'API GWT.
Je préfère l'option 3. Au moins jusqu'à ce que GWT RPC peut-être un jour aura le soutien de surcharger l'CustomFieldSerializer de
Utile de date/heure de mise en forme des conseils.
Dave Paroulek réponse est la bonne approche. Si vous voulez voir un exemple de cela, nous avons créé des widgets de travail indépendant de Fuseau horaire et de traiter les valeurs sur le serveur-côté où nous avons toutes les informations dont nous avons besoin.
UTCDateBox - Wrapper autour de l'GWT DateBox et choisit toujours la date à minuit GMT et représente la valeur comme un Long au lieu d'une Date.
UTCTimeBox - Nouveau widget qui choisit toujours un temps que millis depuis minuit, indépendant de fuseau horaire, également représenté comme un Long.
UTCDateTimeUtils - Code côté serveur qui divise la Date en 2 Longs valeurs appropriées pour UTCDateBox et UTCTimeBox dans un Fuseau horaire et les combine en arrière dans une Date dans un Fuseau horaire.
Voici un exemple de la date de contrôles utilisés ensemble.
Article de Blog décrivant leur mise en œuvre.
Ces widgets sont disponibles sur GitHub.
Je suis en supposant que vous utilisez des appels RPC pour la communication serveur-client ici. Aussi en supposant que vous n'avez pas de soins sur le fuseau horaire B, et vous savez quel fuseau horaire C est sur le serveur.
Vous avez quelques options ici:
ou:
si pour une raison quelconque, aucune de ces sont valables pour vous
voir ce projet de démonstration
GWT fuseau horaire projet de démonstration
J'ai créé un GWT-compatible version de Java de la jsTimezoneDetect bibliothèque Javascript spécifiquement pour cet usage. Cela devrait fournir une (très bonne estimation de l') le fuseau horaire nom purement sur le côté client. N'hésitez pas à essayer et laissez-moi savoir si cela fonctionne ou ne fonctionne pas pour vous.