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:

  1. convertir l'heure actuelle en UTC (si je peux stocker la date dans un format UTC)
    --> résultat = java.util.Date.

  2. 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