2017-05-20 6 views
0

Ich habe eine Zeichenkette eines Datums im "iso8601" -Format und wenn ich sie mit Joda "DateTime" analysiere, ändert sich die Zeitzone des Datums automatisch.Joda DateTime ändert automatisch die Zeitzone beim Analysieren der Zeichenkette

DateTime dateTime = new DateTime("2017-05-22T08:10:00.000+0300") ; 
    System.out.println(dateTime); 

und sein Ausgang ist:

2017-05-22T09:40:00.000+04:30 

Wie Sie die Zeitzone des ersten String 3 zu sehen: 00 und die Zeitzone nach dem Parsen ist +04: 30. Wie kann ich die erste Zeichenfolge analysieren, ohne die Zeitzone zu ändern? (So ​​dass die Zeitzone bleibt +03: 00 auch nach dem Parsing)

Antwort

2

Dieser Konstruktor verwenden Sie die Standardzeitzone anzeigen. Sie müssen die Zeitzone manuell mit DateTime(Object object, DateTimeZone zone) construnctor einstellen.

Oder analysieren Sie diese Zeichenfolge mit der Nutzung von withOffsetParsed() wie folgt aus:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ"); 
    DateTime dateTime = formatter.withOffsetParsed().parseDateTime("2017-05-22T08:10:00.000+0300"); 
+0

Vielen Dank für Ihre hilfreiche Antwort. Ich habe dasselbe Problem mit SimpleDateFormat, wenn ich versuche, mein Objekt zu XML zu serialisieren? Weißt du wie ich das lösen kann? – mehdi

0

Sie Setup Zeitzone manuell etwas wie folgt aus:

String str = "2017-05-22T08:10:00.000+0300" ; 
DateTime dateTime = new DateTime() ; 

System.out.println(dateTime); 
String tzName = str.substring(text.length() - 5); 
DateTimeZone tz = DateTimeZoneDateTimeZone forID(str.substring(3) + ":" + str.substring(text.length() - 2)) 
System.out.println(dateTime.withZone(tz)); 
0

Sie die eingebauten Funktionalitäten von JDK 8 Datum-Zeit-API zur Lösung dieses leicht nutzen können. Der folgende Code druckt 2017-05-22T08: 10 + 03: 00.

DateTimeFormatter df = DateTimeFormatter.ISO_OFFSET_DATE_TIME ; 
OffsetDateTime date1 = OffsetDateTime.parse("2017-05-22T08:10:00.000+03:00", df); 
System.out.println(date1); //prints 2017-05-22T08:10+03:00 
+0

leider muss ich bei JDK7 bleiben !! – mehdi