2016-04-12 4 views
0

J'utilise Java 8 et tente de convertir un horodatage d'un fuseau horaire à un autre. L'horodatage sera dans le fuseau horaire de l'utilisateur, par ex.Convertir la date d'un fuseau horaire en fuseau horaire local

// 2016-04-11T12:00:00Z 
long sourceTime = 1460372400000L; 
timezoneConverter(sourceTime, "America/New_York"); 

Cependant, lors de l'utilisation du temps Joda, ou Java 8 LocalDateTime/instantané, quand je passe l'horodatage, il est réglé en temps de l'utilisateur de la zone - Je ne ai pas besoin que cela se produise, car il est déjà dans la le fuseau horaire de l'utilisateur (tous les horodatages seront envoyés à l'heure locale de l'utilisateur).

ZonedDateTime zdt = 
    ZonedDateTime.ofInstant(Instant.ofEpochMilli(1460372400000L), 
          ZoneId.of("America/New_York")) 

résultats dans

2016-04-11T07:00-04:00[America/New_York] 

au lieu de

2016-04-11T12:00-04:00[America/New_York] 

Yat-il un moyen de contourner cela?

Merci!

+0

Je crains votre déclaration "c'est un horodatage de l'utilisateur ime zone. " indique un malentendu sur la signification des horodatages tels que '1460372400000L'. Ce type d'horodatage global n'est pas lié à des fuseaux horaires, mais juste à UTC + 00: 00. –

Répondre

1

1460372400000L est Mon, 11 Apr 2016 11:00:00 GMT ou Mon, 11 Apr 2016 12:00:00 BST

2016-04-11T11:00:00Z est 2016-04-11T07:00-04:00[America/New_York] si vous convertissez d'un fuseau horaire à l'autre.

Si vous voulez juste le fuseau horaire local, je vous suggère d'utiliser LocalDateTime

LocalDateTime dt = LocalDateTime.ofEpochSecond(1460376000L, 0 , ZoneOffset.ofHours(0)); 
System.out.println(dt); 

impressions

2016-04-11T12:00 
+0

L'horodatage ne doit pas être ajusté dans mon cas - il s'agit d'un horodatage du fuseau horaire de l'utilisateur. – KingTravisG

+0

@ StephenWithAPh1986 c'est ce à quoi 'LocalDateTime' est destiné. Un DateTime sans fuseau horaire. –

0
long sourceTime = 1460372400000L; 
//Select your timezone 
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC"); 
Calendar calendar = new GregorianCalendar(utcTimeZone); 
calendar.setTimeInMillis(sourceTime); 

// Retourne l'heure actuelle Zone

LocalTime time = LocalTime.now(); 
System.out.println("Local Time Zone: "+ZoneId.systemDefault().toString()); 
System.out.println("Current local time : " + time);