Comment puis-je déplacer le fuseau horaire de l'objet Date créé dans le fuseau horaire local vers le fuseau horaire cible?Comment puis-je déplacer le fuseau horaire de l'objet Date créé dans le fuseau horaire local vers le fuseau horaire cible dans le client GWT?
Voici ce dont j'ai besoin. Je souhaite que le client Web sélectionne une date en utilisant DatePicker mais l'objet Date résultant doit ressembler à comme s'il avait été sélectionné dans un autre fuseau horaire. Comme il n'y a aucun moyen de dire DatePicker
pour ce faire, je dois déplacer manuellement la date.
Par exemple c'est le 6 avril 2012 2h42 en Californie en ce moment. Date de création sera en fuseau horaire UTC-7. Je veux avoir l'objet Date du 6 avril 2012 02:42 dans le fuseau horaire Europe/Moscou.
est que je fais ici dès maintenant:
final TimeZoneConstants constTz = GWT.create(TimeZoneConstants.class);
final TimeZone timeZoneMsk = TimeZone.createTimeZone(constTz.europeMoscow());
final TimeZone timeZoneCali = TimeZone.createTimeZone(constTz.americaLosAngeles());
Date curTime = new Date();
DateTimeFormat dateTimeFormat = DateTimeFormat.getFullDateTimeFormat();
Date mskTime = new Date(curTime.getTime() - (curTime.getTimezoneOffset() - timeZoneMsk.getStandardOffset()) * 60 * 1000);
String strLocal = dateTimeFormat.format(curTime, timeZoneCali); // Friday, 2012 April 06 02:42:59 Pacific Daylight Time
String strMsk = dateTimeFormat.format(mskTime, timeZoneMsk); // Friday, 2012 April 06 02:42:59 Moscow Standard Time
Il y a deux problèmes avec cette méthode:
- Si vous me demandez il semble assez bizarre.
- Le fuseau horaire dans
mskTime
est toujours -0007. Je me demande si cela peut causer des problèmes à l'avenir lorsque je désérialiser cet objet du magasin de données Google App Engine.
ou devrais-je produire chaîne avec date complète de temps californienne locale, remplacer fuseau horaire dans la chaîne, puis générer de nouvelles Date
en appelant DateTimeFormat.parse()
? Il semble assez hacky aussi ...
Qu'es-tu de JodaTime for GWT? Est-ce assez stable pour la production?