2011-05-09 6 views
8

J'analyse les horodatages. Ils sont forcés dans mon fuseau horaire local (Europe/Londres) lorsque je les lis. Je veux conserver le décalage de fuseau horaire d'origine à la place.Comment préserver le fuseau horaire dans l'horodatage Joda-Time?

scala> val fmt = org.joda.time.format.ISODateTimeFormat.dateTimeNoMillis() 

scala> val t = fmt parseDateTime ("2012-04-16T23:00:45-04:00") 
t: org.joda.time.DateTime = 2012-04-17T04:00:45.000+01:00 

scala> t.getDayOfMonth 
res2: Int = 17 

scala> fmt print t 
res1: java.lang.String = 2012-04-17T04:00:45+01:00 

Dans cet exemple, un horodatage de America/New_York est forcé vers Europe/London. Quand je convertis le DateTime en String, je veux récupérer la chaîne originale que j'ai alimentée.

De plus, quand je demande à l'horodateur de quel jour du mois il vient, je veux dire qu'il est du 16ème (parce que c'est ce que la date était à l'endroit où il a été généré), pas le 17 (même si c'est ce que la date était dans mon fuseau horaire au même instant).

Comment faire?

Répondre

16

Essayez de créer un DateTimeFormatterwith offset parsing enabled. Cela devrait entraîner la suppression de l'offset de la chaîne analysée à l'origine par les objets DateTime analysés.

Si cela ne fonctionne pas, vous devrez peut-être enregistrer le fuseau horaire séparément. Ensuite, pour imprimer une date, vous récupérez la date elle-même, et le fuseau horaire cible. Set the formatter with the desired time zone, et l'utiliser pour formater la date.

+4

Je ne savais pas que l'analyseur de décalage serait désactivé par défaut. Cela semble étrange pour ISODateTimeFormat de se comporter ainsi. En utilisant le décorateur décrit dans les documents, en utilisant 'ISODateTimeFormat.dateTimeParser(). WithOffsetParsed(). ParseDateTime (dateAsString);' résolu mon problème. Merci d'avoir répondu. http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormatter.html – Snekse

Questions connexes