La conversion de la “les etats-unis/Los Angeles” fuseau horaire “PST” ou “PDT” dans Java ME
Mon serveur m'envoie des fuseaux horaires au format "Amérique/Los Angeles". Sur le client, j'ai un moment que j'ai besoin d'afficher dans ce fuseau horaire. La réponse sera "PST" ou "PDT", en fonction de l'heure d'été à l'heure. Comment dois-je faire la conversion?
Je suis sur Java ME (Blackberry 4.7, pour être précis), donc je ne peux pas utiliser Joda Time.
J'ai besoin pour faire ce calcul rapidement pour un grand nombre de dates (mais un seul fuseau horaire), donc je ne peux pas juste le serveur m'envoyer un décalage, parce que le décalage peut changer en fonction de la date.
Edit: Permettez-moi de reformuler le problème, car il semble y avoir une certaine confusion. Je me suis donné un zoneinfo nom et une date. Je veux savoir le décalage entre l'heure GMT dans ce fuseau horaire à cette date. La réponse variera en fonction de l'heure d'été.
Comme un bonus supplémentaire, je voudrais obtenir la PREMIÈRE à montrer à l'utilisateur (c'est à dire, "PST" ou "PDT"), mais c'est secondaire.
Solution:, je vais résumer ici la solution, car il n'est pas très clair dans les réponses ci-dessous. De ce fait essentiellement ce dont j'ai besoin, en J2ME:
TimeZone zone = TimeZone.getTimeZone("America/Los_Angeles");
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(zone);
calendar.setTime(new Date(2011, 1, 1, 12, 0, 0));
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
calendar.setTime(new Date(2011, 6, 1, 12, 0, 0));
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
OriginalL'auteur Dirk Groeneveld | 2011-02-01
Vous devez vous connecter pour publier un commentaire.
Peut-être que c'est ce que vous êtes désireux. Cela fonctionne sur ma machine en utilisant le standard de java.
Mise à jour: OP dit ci-dessus ne fonctionne pas pour j2ME. Après recherche sur google, j'ai trouvé ici que getOffset() est en fait getRawOffset() en j2me. Cependant, il ne ressemble pas à ça supposrts displayName. Votre seule option, je pense, est de passer par l'ids l'aide de getAvailableIds().
J'ai ajouté le décalage pour vous.
Prend-il en charge la getOffset()?
Mon commentaire précédent était bête, donc je l'ai supprimé. getRawOffset() ne peut pas fonctionner, car elle ne prend pas une date. J2ME est seulement la forme longue getOffset(), j'ai eu à travailler avec le code que j'ai ajouté ci-dessus.
OriginalL'auteur CoolBeans
Ne J2ME pas en charge
Fuseau horaire.getTimeZone(id)
? C'est en gros ce que vous voulez, afin d'obtenir les décalages de fuseau horaire, etc. J'espère que J2ME prend en charge zoneinfo noms de zone.BlackBerry Fuseau horaire de mise en œuvre prend en charge zoneinfo noms. Le problème de l'OP, je pense, c'est qu'il reçoit fuseau horaire abréviations, pas zoneinfo noms. BlackBerry par défaut EME si elle ne peut pas reconnaître l'abréviation. Malheureusement, BB modèles ne savent souvent pas beaucoup d'abréviations. Vous pouvez utiliser
TimeZone.getAvailableIDs()
pour voir ce qui est pris en charge sur une plate-forme particulière.la question, dit l'OP est de mettre le zoneinfo nom. Je suis toujours un peu confus...
Comment avez-vous déterminé que "les etats-unis/Los Angeles", c'est exactement égale à la TVP? Que serait une surprise pour moi.
Vous avez raison, ils sont différents. J'ai eu tort. Merci pour cette remarque!
OriginalL'auteur Jon Skeet