web-dev-qa-db-fra.com

Comment convertir n'importe quelle heure de date en UTC en utilisant ZonedDateTime ou Java 8

J'essaie de convertir la date 06-12-2015 02:10:10 PM de la zone par défaut à UTC en utilisant ZonedDateTime.

LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
ZonedDateTime utc = ZonedDateTime.of(localDateTime, ZoneOffset.UTC);

mais utc renvoie 2015-12-06T14:10:10Z au lieu de 06-12-2015 09:10:10 AM

Comment convertir la date de la zone par défaut en UTC? La réponse donnée ici convertit l'heure actuelle en UTC.

6
Bilal Shah

Vous pouvez utiliser ZonedDateTime.ofInstant(Instant, ZoneId) où le deuxième paramètre est UTC (l'instant connaît le décalage local). Quelque chose comme,

String source = "06-12-2015 02:10:10 PM";
String pattern = "MM-dd-yyyy hh:mm:ss a";
DateFormat sdf = new SimpleDateFormat(pattern);
try {
    Date date = sdf.parse(source);
    ZonedDateTime zdt = ZonedDateTime.ofInstant(date.toInstant(), ZoneId.of("UTC"));
    System.out.println(zdt.format(DateTimeFormatter.ofPattern(pattern)));
} catch (ParseException e) {
    e.printStackTrace();
}

Et je reçois (correspondant à mon décalage de zone locale)

06-12-2015 06:10:10 PM
17
Elliott Frisch