2013-02-14 3 views
0

mon cas est que j'ai une date obj la date à l'intérieur est heure UTC. Cependant, je veux que ce soit changé en heure du Japon.Modifier la valeur Date d'un fuseau horaire à un autre fuseau horaire

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Japan")); 
    calendar.setTime(someExistingDateObj); 
    System.out.println(String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)) + ":" + calendar.get(Calendar.MINUTE)); 

le existingDateObj est mis en correspondance de db et la valeur db est 14/02/2013 03: 37: 00,733

04:37

il semble que le fuseau horaire ne fonctionne pas?

merci pour votre temps ....

+0

Que utilisez-vous? 'java.sql.Date' ou' java.util.Date'? Comme je l'ai vérifié pour l'objet Utils et son fonctionnement bien. – dShringi

+0

Même dans le cas de 'java.sql.Date', cela ne fait aucune différence. Fonctionne bien pour moi! Pouvez-vous publier le code que vous utilisez pour 'someExistingDateObj'. – dShringi

+0

@dShringi merci pour votre réponse Shringi. SVP voir ma discussion avec Ryan –

Répondre

0

Votre problème peut être que vous regardez les choses mal. Un Date n'a pas de fuseau horaire. Il représente un moment discret dans le temps et est "intended to reflect coordinated universal time". Les calendriers et les formateurs de date sont ce qui obtient des informations de fuseau horaire. Votre deuxième exemple avec les instances Calendar et TimeZone semble fonctionner correctement. En ce moment, ce code:

public static void main(String[] args) { 
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Japan")); 
    System.out.println(String.valueOf(calendar.get(Calendar.HOUR)) + ":" + calendar.get(Calendar.MINUTE)); 
} 

Rapports:

0:32 

qui semble correct pour moi. Que trouvez-vous mal avec cela?

Mise à jour: Oh, peut-être que vous attendez 12:32 à partir du code ci-dessus? Vous voudrez utiliser Calendar.HOUR_OF_DAY au lieu de Calendar.HOUR pour cela, ou faites quelques maths d'heure. Calendar.HOUR utilise 0 pour représenter midi et minuit.

Mise à jour 2: Voici ma dernière tentative pour essayer de faire passer cela. Essayez ce code:

public static void main(String[] args) { 
    Calendar calendar = Calendar.getInstance(); 
    SimpleDateFormat format = new SimpleDateFormat("H:mm a Z"); 
    List<TimeZone> zones = Arrays.asList(
      TimeZone.getTimeZone("CST"), 
      TimeZone.getTimeZone("UTC"), 
      TimeZone.getTimeZone("Asia/Shanghai"), 
      TimeZone.getTimeZone("Japan")); 
    for (TimeZone zone : zones) { 
     calendar.setTimeZone(zone); 
     format.setTimeZone(zone); 
     System.out.println(
       calendar.get(Calendar.HOUR_OF_DAY) + ":" 
       + calendar.get(Calendar.MINUTE) + " " 
       + (calendar.get(Calendar.AM_PM) == 0 ? "AM " : "PM ") 
       + (calendar.get(Calendar.ZONE_OFFSET)/1000/60/60)); 
     System.out.println(format.format(calendar.getTime())); 
    } 
} 

Notez qu'il crée un seul objet Calendrier, représentant "maintenant". Ensuite, il imprime le temps représenté par ce calendrier dans quatre fuseaux horaires différents, en utilisant à la fois la méthode Calendar.get() et un SimpleDateFormat pour montrer que vous obtenez le même résultat dans les deux sens. La sortie de ce droit est maintenant:

22:59 PM -6 
22:59 PM -0600 
4:59 AM 0 
4:59 AM +0000 
12:59 PM 8 
12:59 PM +0800 
13:59 PM 9 
13:59 PM +0900 

Si vous avez utilisé Calendar.HOUR au lieu de Calendar.HOUR_OF_DAY, vous verriez ceci:

10:59 PM -6 
22:59 PM -0600 
4:59 AM 0 
4:59 AM +0000 
0:59 PM 8 
12:59 PM +0800 
1:59 PM 9 
13:59 PM +0900 

Il montre correctement les temps actuels en Europe centrale Heure normale (mon fuseau horaire), heure UTC, heure de Shanghai et heure du Japon, respectivement, avec leurs décalages de fuseau horaire. Vous pouvez voir qu'ils s'alignent tous et ont les décalages corrects.

+0

merci pour votre réponse rapide. dans le second cas. Date toString est 2013-02-14 03:37:00 mais String.valueOf (calendar.get (Calendar.HOUR)) + ":" + calendar.get (Calendar.MINUTE) est 4:37 ce qui est incorrect. –

+0

Rien dans votre deuxième cas ne donne cette date. Essayez mon code pour prouver que cela fonctionne. Vous pouvez le vérifier par rapport à [Google] (https://www.google.com/recherche? q = courant + japon + temps). Si vous n'êtes toujours pas convaincu, essayez de fournir un [SSCCE] (http://sscce.org), et quelqu'un peut indiquer où vous allez mal. –

+0

Vous n'avez pas non plus mentionné le fuseau horaire dans lequel vous vous trouvez. Pourquoi 4:37 n'est pas la bonne sortie pour 3:37 votre temps? –

0

SDF2 et sdf3 sont equaly initialisés, donc il n'y a pas besoin de deux d'entre eux.

Questions connexes