2014-06-23 8 views
5

chcę analizować ciąg do obiektu DateTime:Jak ustawić strefę czasową za pomocą pliku org.joda.time?

DateTimeFormatter fmt = DateTimeFormat.forPattern("M/d/yyyy HH:mm"); 
DateTime dt = fmt.parseDateTime(stringDate + " " +  stringTime).withZone(DateTimeZone.forID("Europe/Dublin")); 

Gdybym wprowadzić czas 06/22/2014 10:43 mam

22.06.2014 08:43 +0100,

ale chcę dostać

06/22/2014 10:43 +0100

Jak mogę to zrobić?

+0

Niestety, po pewnym czasie spędzonym znalazłem odpowiedź: http://stackoverflow.com/questions/19002978/in-joda-time- jak-konwertować-strefę-czasu-bez-zmiany-czasu Dziękujemy za @jgm – Filosssof

Odpowiedz

8

Powinieneś zastosować strefę czasową do formatyzatora, a nie do DateTime. W przeciwnym razie data zostanie przeanalizowana już w lokalnej strefie czasowej, a Ty po prostu przenosisz ją do wybranej strefy czasowej.

DateTimeFormatter fmt = DateTimeFormat.forPattern("M/d/yyyy HH:mm") 
         .withZone(DateTimeZone.forID("Europe/Dublin")); 
DateTime dt = fmt.parseDateTime("06/22/2014 10:43"); 
1

Spójrz na ten kod rozszerzonym:

String s = "06/22/2014 10:43"; 
DateTimeFormatter fmt = DateTimeFormat.forPattern("M/d/yyyy HH:mm"); // uses local zone 
DateTime dt1 = fmt.parseDateTime(s).withZone(DateTimeZone.forID("Europe/Dublin")); 
DateTime dt2 = fmt.withZone(DateTimeZone.forID("Europe/Dublin")).parseDateTime(s); 
DateTime dt3 = 
    fmt.parseDateTime(s).withZoneRetainFields(DateTimeZone.forID("Europe/Dublin")); 
System.out.println(dt1); // 2014-06-22T09:43:00.000+01:00 (from my zone Berlin to Dublin) 
System.out.println(dt2); // 2014-06-22T10:43:00.000+01:00 
System.out.println(dt3); // 2014-06-22T10:43:00.000+01:00