Java - convertir la date du jour dans l'heure UTC et l'heure UTC dans n'importe quel Fuseau horaire
J'ai besoin de deux choses:
-
convertir l'heure actuelle en UTC (si je peux stocker la date dans un format UTC)
--> résultat = java.util.Date. -
convertir chargé date (UTC format) dans n'importe quel Fuseau horaire --> résultat =
java.util.Date ou millisecondes.
Pour les deux points de supporter la lumière du jour à l'esprit.
1)
J'ai trouvé la suite sur stackoverflow:
Calendar c = Calendar.getInstance();
System.out.println("current: "+c.getTime());
TimeZone z = c.getTimeZone();
int offset = z.getRawOffset();
if(z.inDaylightTime(new Date())){
offset = offset + z.getDSTSavings();
}
int offsetHrs = offset / 1000 / 60 / 60;
int offsetMins = offset / 1000 / 60 % 60;
System.out.println("offset: " + offsetHrs);
System.out.println("offset: " + offsetMins);
c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
c.add(Calendar.MINUTE, (-offsetMins));
System.out.println("GMT Time: "+c.getTime());
--> le résultat est égal à l'UTC?
2)
public static long getTimeMillisFromTimeZone(long utcTimeMillis,
String timeZoneId) {
System.out.println("input millis: " + utcTimeMillis);
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.setTimeInMillis(utcTimeMillis);
TimeZone fromTimeZone = calendar.getTimeZone();
TimeZone toTimeZone = TimeZone.getTimeZone(timeZoneId);
calendar.setTimeZone(fromTimeZone);
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1);
if (fromTimeZone.inDaylightTime(calendar.getTime())) {
calendar.add(Calendar.MILLISECOND, calendar.getTimeZone()
.getDSTSavings() * -1);
}
calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}
System.out.println(calendar.getTime());
System.out.println("output millis: " + calendar.getTime().getTime());
return calendar.getTime().getTime();
}
--> j'ai eu un problème il y a --> perdu 1h!
Dans mon exemple, j'ai stocké une Date dans le Fuseau horaire "Europe/Vienna" (à l'aide de la lumière du jour) dans la base de données que l'utc.
Europa/Vienne --> 10:00
UTC --> 09:00
Maintenant je veux convertir cette UTC (09:00) dans "Europe/Vienna" et j'obtiens: 09:00 = j'ai perdu une heure..
OriginalL'auteur user1731299 | 2012-11-29
Vous devez vous connecter pour publier un commentaire.
Avez-vous pensé simplement à l'aide existants DateTime API comme Joda?
Mise à JOUR
déjà répondu: Joda Time - entre les différents fuseaux horaires
serait la même chose, je pense juste utiliser
withZone
Pouvez-vous me donner une solution avec Joda?
regarde ma réponse mis à jour
regarde mon second post - millisecondes ne sont pas influencés par 'withZone' 🙁
OriginalL'auteur christian.vogel
S'il vous plaît essayer de code suivant (je l'utilise Joda Time) pour convertir des dates entre les fuseaux Horaires:
Conversion UTC pourrait être simplifiée:
Cet appel avec succès ajoute 1 heure pour moi:
Je vois maintenant .. en Étais sûr, que ça fonctionne, il mettra à jour la réponse bientôt
S'il vous plaît essayer une mise à jour
Eh bien maintenant, 'convertDate" délivrer une date avec +1 heure..peut-être que la lumière du jour problème?
cette ligne est le problème dans mon esprit: LocalDateTime localDateTime = new LocalDateTime(date.getTime()); Parce que sourceDate est toujours une Date UTC pourquoi dois-je avoir avec la date du jour?
OriginalL'auteur udalmik