2011-05-09 14 views
8

Parsuję sygnatury czasowe. Są zmuszeni do mojej lokalnej strefy czasowej (Europa/Londyn), kiedy je czytam. Zamiast tego chcę zachować oryginalne przesunięcie strefy czasowej.Jak zachować strefę czasową w znaczniku czasu 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 

W tym przykładzie znacznik czasu z America/New_York jest wysyłany do Europy/Londynu. Kiedy konwertuję DateTime z powrotem na String, chcę odzyskać oryginalny ciąg, który wprowadziłem.

Dodatkowo, gdy pytam o sygnaturę czasową, o jaki dzień miesiąca to jest, chcę, aby było napisane, że pochodzi z 16-tego (bo taka była data w miejscu, w którym został wygenerowany), a nie 17 (mimo, że to była data w mojej strefie czasowej w tym samym momencie).

Jak to zrobić?

Odpowiedz

16

Spróbuj utworzyć obiekt DateTimeFormatterwith offset parsing enabled. To powinno spowodować, że przeanalizowane obiekty zostaną zatrzymane z ciągu, który został pierwotnie przeanalizowany.

Jeśli to nie zadziała, być może trzeba osobno zapisać strefę czasową. Następnie, aby wydrukować datę, pobierzesz samą datę, i docelową strefę czasową. Set the formatter with the desired time zone, i użyj go do sformatowania daty.

+4

Nigdy nie wiedziałem, że offset parsera byłby domyślnie wyłączony. Wydaje się dziwne, że ISODateTimeFormat zachowuje się w ten sposób. Używanie dekoratora opisanego w dokumentach przy użyciu metody 'ISODateTimeFormat.dateTimeParser(). WithOffsetParsed(). ParseDateTime (dateAsString);' rozwiązało mój problem. Dziękuję za odpowiedź. http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormatter.html – Snekse

Powiązane problemy