2010-04-12 2 views

Répondre

4

Essayez ceci:

Date estTime = new Date(utcTime.getTime() + TimeZone.getTimeZone("EST").getRawOffset()); 

Où utcTime est objet Date de l'heure UTC (si vous avez déjà la valeur à long - il suffit de l'utiliser)

+0

Je pensais que l'utilisation de la classe Date était déconseillée. –

+0

Wow, génial! Merci beaucoup! – rd42

+0

La création de calendrier peut être assez coûteuse, c'est pourquoi je n'aime pas l'utiliser. Si la performance n'est pas un problème, c'est aussi une option. – duduamar

3
final Calendar c = Calendar.getInstance(TimeZone.getTimeZone("EST")); 
c.setTimeInMillis(longTime); 

longTime est le nombre de millisecondes depuis l'époque en heure UTC. Vous pouvez ensuite utiliser les méthodes de la classe Calendar pour obtenir les différents composants de la date/heure.

+0

Excellent merci! – rd42

1

rd42, Pouvez-vous me donner un peu plus de contexte à ce sujet?

Vous dites que vous avez un "horodatage UTC". Est-ce stocké dans une base de données? Est-ce une chaîne?

je pourrais être en mesure de vous fournir plus d'une réponse si vous pouvez donner le contexte que vous essayez de travailler cela dans.


Ok pour des raisons de clarté ce que vous dites est que vous avez une valeur longue qui représente un horodatage en UTC.

Alors dans ce cas, ce que vous allez faire est la suivante.

import java.util.Calendar; 
import java.util.TimeZone; 

TimeZone utcTZ= TimeZone.getTimeZone("UTC"); 
Calendar utcCal= Calendar.getInstance(utcTZ); 
utcCal.setTimeInMillis(utcAsLongValue); 

Votre objet de calendrier est maintenant en UTC.

Pour afficher ce que vous allez vouloir faire quelque chose comme ce qui suit:

import java.text.SimpleDateFormat; 
import java.util.Date; 

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss zzz"); 
sdf.setTimeZone(utcTZ); 
Date utcDate= utcCal.getTime(); 
sdf.formatDate(utcDate); 

Cela vous permettra de lire dans un horodatage pour le fuseau horaire UTC stockée en tant que valeur à long et de le convertir à un objet Java Calendar ou Date.

Espérons que vous obtenez où vous devez être.

+0

La variable est de type long avec un horodatage UTC. Essayer de le changer de 1271101959000 à quelque chose de plus amical. – rd42