54 votes

Comment analyser une date, y compris le fuseau horaire, avec Joda Time

Cet extrait de code analyse toujours la date dans le fuseau horaire actuel et non dans le fuseau horaire de la chaîne en cours d'analyse.

 final DateTimeFormatter df = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss 'GMT'Z yyyy");
final DateTime dateTime = df.parseDateTime("Mon Aug 24 12:36:46 GMT+1000 2009");
System.out.println("dateTime = " + dateTime);
// outputs dateTime = 2009-08-24T04:36:46.000+02:00
 

Il produit:

 dateTime = 2009-08-24T04:36:46.000+02:00
 

alors que j'attends:

 dateTime = 2009-08-24T04:36:46.000+10:00
 

Des idées que je fais mal?

77voto

Steve McLeod Points 19016

OK, Googling m'a donné la réponse à ma propre question: utilisez withOffsetParsed() , ainsi:

 final DateTimeFormatter df = DateTimeFormat
        .forPattern("EEE MMM dd HH:mm:ss 'GMT'Z yyyy");
final DateTime dateTime = df.withOffsetParsed()
        .parseDateTime("Mon Aug 24 12:36:46 GMT+1000 2009");
 

Cela marche.

37voto

z0mb1ek Points 81

aussi vous pouvez choisir:

 // parse using the Paris zone
DateTime date = formatter.withZone(DateTimeZone.forID("Europe/Paris")).parseDateTime(str);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X