web-dev-qa-db-fra.com

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 analysée.

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 génère:

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 sur ce que je fais mal?

53
Steve McLeod

OK, googler m'a donné la réponse à ma propre question: utilisez withOffsetParsed() , comme suit:

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.

75
Steve McLeod

vous pouvez également choisir:

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