2010-03-29 6 views
4

Comment puis-je obtenir l'heure actuelle de l'horloge murale locale (en nombre de millis depuis le 1er janvier 1970) à Londres? Depuis mon application peut fonctionner sur un serveur dans n'importe quel endroit, je pense que je dois utiliser un TimeZone de "Europe/Londres". Je dois également tenir compte de l'heure d'été, c'est-à-dire que l'application devrait ajouter une heure pendant «l'été».Get Time à Londres

Je préférerais utiliser les bibliothèques java.util standard.

Est-ce correct?

TimeZone tz = TimeZone.getTimeZone("Europe/London") ; 
Calendar cal = Calendar.getInstance(tz); 
return cal.getTime().getTime() + tz.getDSTSavings(); 

Merci

+0

Si vous écrivez un serveur, le paradigme commun est toujours à utiliser en interne le temps UTC, puis formatez à l'aide d'un DateFormatter lors de l'affichage dans l'interface utilisateur. – Kylar

+2

@Kylar: L'utilisation de l'UTC uniquement n'est pas spécifique aux applications serveur, mais doit être effectuée par pratiquement toutes les applications. – Joey

+1

Je ne présumerais pas de connaître toutes les applications là-bas;) – Kylar

Répondre

9

Vous n'avez pas besoin Calendar, seulement TimeZone.

TimeZone london = TimeZone.getTimeZone("Europe/London"); 
long now = System.currentTimeMillis(); 
return now + london.getOffset(now); 
4

D'autres ont dit qu'il pourrait bien ne pas être une bonne idée de le faire - je crois que cela dépend de votre situation, mais en utilisant UTC est certainement quelque chose à considérer.

Cependant, je pense que vous avez manqué quelque chose ici: le nombre de secondes qui ont eu lieu depuis le 1er janvier 1970 UTC (qui est toujours la même que pour l'époque Unix - et qui est identique à Londres, le décalage à cette date était de 0) peut être obtenu avec l'une de ces expressions:

System.currentTimeMillis() 
new Date().getTime() 
Calendar.getInstance().getTime().getTime() 

Si vous pensez à ce sujet, le nombre de millisecondes depuis cet instant particulier ne change pas en fonction du fuseau horaire » re

Oh, un d la suggestion normale - pour une meilleure API date et heure, voir Joda Time.

+0

Le Royaume-Uni n'utilise-t-il pas le DST également? Dans ce cas, il diffère de l'UTC, en fait. – Joey

+1

@Johannes Rössel: DST ou pas, le nombre de (milli) secondes écoulées depuis l'époque est sans rapport avec l'heure d'été. S'il est 18h ou 19h, * NE PAS * changer le nombre de (milli) secondes écoulées depuis l'époque. Les minutes ne sont pas une unité fixe (vous pouvez avoir 59 ou 61 secondes), les jours ne sont pas une unité fixe (vous pouvez avoir 23 ou 25 heures par jour) mais les secondes et les millisecondes sont une unité fixe. C'est précisément la raison pour laquelle vous devez * toujours * mesurer le temps en (milli) secondes et mémoriser les dates/heures en (milli) secondes depuis l'époque. Et seulement faire la conversion lors de leur affichage à l'utilisateur final. – SyntaxT3rr0r

2

Pour obtenir l'heure actuelle à Londres:

SimpleDateFormat f = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z"); 
f.setTimeZone(TimeZone.getTimeZone("Europe/London")); 
System.out.println(f.format(GregorianCalendar.getInstance().getTime()));