Conversion du fuseau horaire "America / Los Angeles" en " PST "ou" PDT " en Java ME


Mon serveur m'envoie des fuseaux horaires du format "America/Los Angeles". Sur le client, j'ai un temps que je dois afficher dans ce fuseau horaire. La réponse sera "PST" ou "PDT", en fonction de l'heure d'été à l'heure. Comment faire cette conversion?

Je suis sur Java ME (Blackberry 4.7, pour être précis), donc je ne peux pas utiliser Joda Time.

Je devrai faire ce calcul rapidement pour beaucoup de dates (mais un seul fuseau horaire), donc je ne peux pas simplement demander au serveur de 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. On me donne un nom zoneinfo et une date. Je veux connaître le décalage de GMT dans ce fuseau horaire à cette date. La réponse variera en fonction de l'heure d'été.

En prime, j'aimerais que le TLA soit montré à l'utilisateur (c'est-à-dire "PST" ou "PDT"), mais c'est secondaire.

Solution: {[9] }Je vais résumer la solution ici, parce que ce n'est pas très clair d'après les réponses ci-dessous. Cela fait essentiellement ce dont j'ai besoin, dans 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)));
Author: Dirk Groeneveld, 2011-02-02

2 answers

Peut-être que c'est ce que vous êtes désireux. Cela fonctionne sur ma machine en utilisant java standard.

        Calendar calendar = Calendar.getInstance();       
        TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
        calendar.setTimeZone(tz);
         System.out.println("Offset from UTC="+tz.getOffset(calendar.getTimeInMillis())/(60*60*1000)); //prints -8
        System.out.println(tz.getDisplayName(Boolean.TRUE, 0)); //prints PDT
        System.out.println(tz.getDisplayName(Boolean.TRUE, 1)); //prints Pacific Daylight Time
        System.out.println(tz.getDisplayName(Boolean.FALSE, 0));//prints PST
        System.out.println(tz.getDisplayName(Boolean.FALSE, 1));//prints Pacific Standard Time  

Update : OP a déclaré que ce qui précède ne fonctionnait pas pour j2ME. Après avoir googlé, j'ai trouvé ici que getOffset() est en fait getRawOffset() dans j2me. Cependant, il ne ressemble pas à ce supposrts DisplayName. Votre seule option, je pense, est de parcourir les ID en utilisant getAvailableIds () .

 6
Author: CoolBeans, 2011-02-02 00:21:10

J2ME ne prend-il pas en charge TimeZone.getTimeZone(id)? C'est essentiellement ce que vous voulez, afin d'obtenir les décalages de fuseau horaire, etc. J'espère que J2ME prend en charge les noms de zone zoneinfo.

 1
Author: Jon Skeet, 2011-02-01 23:37:57