2009-08-25 8 views
52

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.Comment puis-je analyser une date incluant le fuseau horaire avec Joda Time

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 je pense:

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

Toutes les idées ce que je fais mal?

Répondre

73

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

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

+5

Vous devez accepter votre réponse. –

+2

Merci: D Vous êtes un génie! – mgonto

+6

IMO, le comportement par défaut de 'DateTimeFormatter' semble violer le" principe du moindre étonnement ", en particulier dans le contexte d'unmarshaller. Merci Steve d'avoir mis au jour 'withOffsetParsed()'. –

32

aussi vous pouvez choisir:

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