2009-11-28 5 views
3

J'essaie d'instancier GregorianCalendar avec TimeZone GMT, mais chaque fois que j'appelle la méthode getTime(), cela me donne du temps dans le TimeZone local. Voici mon code:Problème TimeZone en Java

Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT")); 
System.out.println(cal.getTime()); 

La sortie Je reçois est la suivante:

Sat Nov 28 19:55:49 PKT 2009 

S'il vous plaît aider!

+0

Voir http://stackoverflow.com/questions/1802758/how-do-i-get-the-current-time-in-a-different-timezone-in-java/1802787#1802787 –

Répondre

9

Je ne suis pas sûr si cela répond à votre question, mais c'est une façon d'obtenir "maintenant" en GMT.

import java.text.* 
import java.util.* 

Calendar cal = new GregorianCalendar(); 
Date date = cal.getTime(); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z"); 
formatter.setTimeZone(TimeZone.getTimeZone("GMT")); 
System.out.println(formatter.format(date)); 

Voir le Javadoc on SimpleDateFormat pour différents modèles. En outre, vous voudrez peut-être considérer Joda Time car il est de loin supérieur pour les dates et heures.

+1

+1 pour fournir un bon exemple détaillé pour aller avec mes divagations, et pour suggérer Joda Time. java.util.Date et Calendar sont une source d'embarras pour le langage Java. –

+0

N'est-ce pas la manière préférée d'obtenir un calendrier: Calendrier cal = Calendar.getInstance()? – kgrad

+0

+1 pour Joda Time –

6

Le problème n'est pas GregorianCalendar mais avec Date, qui est utilisé pour formater la date/heure pour toString pour println.

Si vous souhaitez contrôler la mise en forme de date, vous devrez instancier votre propre DateFormat - Je l'utilise toujours SimpleDateFormat parce que je suis assez pointilleux sur la façon dont je veux que mes dates de regarder.

Si les détails sur la mise en forme de la date ne vous intéressent pas, vous pouvez également utiliser l'une des méthodes usine getInstance... de DateFormat.

Vous pouvez explicitement setTimeZone sur un DateFormat (y compris SimpleDateFormat, bien sûr).

+0

il appelle de manière ecclésiastique 'getTime()', qui renvoie Date, ce qui, comme vous le dites, devrait être évité. – Bozho

+0

Je n'ai pas dit ça. J'ai dit que la façon dont les formats de date à une chaîne doit être évitée. –

+1

ah, j'ai compris le "qui est utilisé", avec le calendrier étant le "faiseur", mais vous vouliez dire le qustion-auteur :) – Bozho