2016-05-27 8 views
3

Ich habe ein Problem mit der neuen Java Date-API, vor allem die java.time.DateTimeFormatter.Hat DateTimeFormatter etwas Ähnliches wie die DateTimeFormatter # withOffsetParsed() -Methode von Joda?

Ich suche nach einer Möglichkeit, den TimeZone-Offset zu einer bestimmten Zeit hinzuzufügen.

z.B.

Das ist mein problematischer Code:

LocalDateTime time = LocalDateTime.now(); 
LOG.debug(time.format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss")); 

"2016-05-27 14:22:00 UTC+2" 

sollte

"27.05.2016 16:22:00" 

(mit dem Muster ": mm ss dd.MM.yyyy HH") analysiert werden

Die Formatierung ergibt eine Zeitreihe, die dem angegebenen Muster entspricht, ohne jedoch den Offset der lokalen Zeitzone zu berücksichtigen.

+0

Sie 16.22 Wollen (wie in: in 2 Stunden auf das Datum in dem Anfang string) oder willst du 12:22 (wie in: die Ortszeit in der UTC-Zeitzone)? Bei ersterem müssen Sie wahrscheinlich das Ende der Zeichenfolge manuell analysieren, bei ersterem können Sie zuerst eine OffsetDateTime verwenden. – assylias

Antwort

-1

Ja, Sie können einen Offset angeben, den Sie berücksichtigen möchten. Sie können dies auf verschiedene Arten tun, aber ich teile ein Stück Code, der Sie in Gang bringen wird.

Dies ist ein Beispiel für das Erstellen eines Formatierungsobjekts mit dem Satz von Muster und Offset.

+0

Sie verwenden die alte Date-API hier ... – assylias

+0

@assylias Sorry, nur ein kurzes Beispiel. – codex

1

Eine der vielen Möglichkeiten, Zeitzone, Offset und Formatierung anzuwenden. Es wird helfen, zwischen Joda und Java 8 Mal zu wechseln.

Java 8 Datum/Uhrzeit api

String input = "2016-05-27 14:22:02 UTC+0200"; 
DateTimeFormatter parser = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss 'UTC'Z"); 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); 
LocalDateTime localDateTime = parser.parse(input, LocalDateTime::from); 
System.out.println(localDateTime); //2016-05-27T14:22:02 
//Apply different offset on the above instant. 
OffsetDateTime offsetDateTime = parser.parse(input, OffsetDateTime::from).withOffsetSameInstant(ZoneOffset.of("+07:00")); 
System.out.println(offsetDateTime); //2016-05-27T19:22:02+07:00 
//Apply different timezone on the above instant. 
ZonedDateTime zonedDateTime = parser.parse(input, ZonedDateTime::from).withZoneSameInstant(ZoneId.of("Asia/Jakarta")); 
System.out.println(zonedDateTime);// 2016-05-27T19:22:02+07:00[Asia/Jakarta] 
//Apply formatting 
System.out.print(formatter.format(zonedDateTime));//27.05.2016 19:22:02 

Joda api

String input = "2016-05-27 14:22:02 UTC+0200"; 
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss 'UTC'Z"); 
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss"); 
LocalDateTime localDateTime = parser.parseLocalDateTime(input); 
System.out.println(localDateTime);//2016-05-27T14:22:02.000 
//Apply the above offset to the date time 
DateTime offsetParsedDateTime = parser.withOffsetParsed().parseDateTime(input); 
//Change to new Offset 
DateTime jakartaDateTimeOffset = offsetParsedDateTime.toDateTime(DateTimeZone.forOffsetHours(7)); 
System.out.println(jakartaDateTimeOffset);//2016-05-27T19:22:02.000+07:00 
//Change to new Zone 
DateTime jakartaDateTimeZone = offsetParsedDateTime.toDateTime(DateTimeZone.forID("Asia/Jakarta")); 
System.out.println(jakartaDateTimeZone);//2016-05-27T19:22:02.000+07:00 
//Apply formatting 
System.out.print(formatter.print(jakartaDateTimeZone));//27.05.2016 19:22:02 
+0

Die Idee besteht darin, die Eingabe-Zeichenfolge zu analysieren, ohne den Offset zu harden ... – assylias

+0

Das half. Vielen Dank – Tente