2016-05-27 13 views
3

私は新しいJava Date-API、特にjava.time.DateTimeFormatterに問題があります。DateTimeFormatterには、JodaのDateTimeFormatter#withOffsetParsed()メソッドのようなものがありますか?

私はTimeZone-Offsetを特定の時間に追加する方法を探しています。

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

"27.05.2016 16:22:00" 

に解析されるべきである(パターンを使用して "DD.MM.YYYY HH:MM:SS")

これは私の問題のコードである:

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

フォーマットは、指定されたパターンに一致するが、ローカルTimeZoneのオフセットを考慮しない時間ストリングになります。

+0

あなたは、午前16時22分(のように:最初の文字列に日付に2時間を追加)したいですかまたはあなたは12:22を希望しますか?(現時点ではUTCタイムゾーンの現地時間ですか?)前者の場合は、文字列の終わりを手動で解析する必要があります。前者の場合は、最初にOffsetDateTimeを使用できます。 – assylias

答えて

-1

はい、考慮するオフセットを指定できます。 これはいくつかの方法で行うことができますが、私は あなたに行くコードを共有します。

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Local.US); 

これは、パターンとオフセットのセットを使用して書式設定オブジェクトを作成する方法の例です。

+0

ここで従来のDate APIを使用しています... – assylias

+0

@assylias申し訳ありませんが、簡単な例を提供したいと思います。 – codex

1

タイムゾーン、オフセット、および書式設定を適用するさまざまな方法の1つです。これは、JodaとJava 8の切り替えを支援します。

のJava 8日付/時刻の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 

ジョダの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

考えてみましょうオフセットをharcodingせずに入力文字列を解析する... – assylias

+0

それは助けた。ありがとう – Tente

関連する問題