2017-09-10 1 views
-4

datetimeをjavaのあるフォーマットから別のフォーマットに変換する必要があります。ここから始まる期間イムです:Javaでdatetimeを変換する

2001-01-01T01:00Z/2002-02-02T02:00Z 

、ここでは私がで終わる必要がある結果である:

2002-02-02T02:00:00 

だから、基本的に私は、期間の第2の部分を必要と私は:00を追加する必要があります最後に数秒でZを削除してください。

Imは日付の書式にはあまりよく知られていません。これらは標準フォーマットですか?これらのdatetimesを読み込んで変換するために何らかのライブラリを使用できますか?

+1

Javaバージョン8を使用している場合は、 'java.time'パッケージを参照してください。以前のバージョンを使用している場合は、joda-timeライブラリを調べてください。 – Henrik

+2

@Henrik 'java.util.time'ではなく' java.time'です。 –

+0

ルーキーな間違い....恥ずかしい。ありがとう。 – Henrik

答えて

1

TL; DR

Interval.parse(input) 
     .getEnd() 
     .atOffset(ZoneOffset.UTC) 
     .format(
      DateTimeFormatter.ISO_LOCAL_DATE_TIME 
     ) 

Interval

は、期間のためのあなたの入力文字列が標準ISO 8601形式です。それは、最後にZがズールーの略でUTCを意味するモーメントのペアを表します。スラッシュ文字は開始と終了を区切ります。

プロジェクトにあるIntervalクラスのものを解析します。

Interval interval = Interval.parse(input) ; 

Instant

停止瞬間を抽出します。

Instant instant = interval.getEnd() ; 

OffsetDateTime

私はあなたがInstantのようにオブジェクトを操作するのではなく文字列を操作する必要があると思います。しかし、書式設定された文字列を生成するには、InstantOffsetDateTimeに変換してください。

OffsetDateTime odt = instant.atOffset(ZoneOffset.UTC) ; 

また、そのようなZとしてオフセット/ゾーンインジケータを削除するには、通常は悪い考えです。結果として得られる文字列は、その意味に関してあいまいになり、もはやタイムライン上の特定の瞬間を表現しません。しかし、あなたが主張しているのであれば、事前定義されています。

String output = odt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) ;