2016-05-19 3 views
1

次の形式の日付文字列を解析する必要があります。Javaの解析DateTimeとタイムゾーンを無視する

「2016年5月19日夜01時07分15秒PDT」

私のデータベースサーバがETであるが、私はタイムゾーンなしと変換することなく、自分のデータベースにTIMESTAMP 2016-05-19 13:07:15を保存したいですETへ。ですから、本質的に、私は文字列中のPDTを無視したいと思います。

現在のところ、ZonedDateTimeオブジェクトに文字列を解析し、それをデータベースのTIMESTAMPデータ型にマップしますが、ZonedDateTimeがPDTであることを知っているため、休止状態でバックエンドで変換を行っています。したがって、上記の例の日付は、私のデータベースに2016-05-19 16:07:15として保存され、最終的には2016-05-19 13:07:15となります。

私が考えていた考えの1つは、文字列の最後からPDTを取り除き、それをLocalDateTimeとして解析することでしたが、それを行う前に、本質的にちょうどZonedDateTimeからタイムゾーンを無視するか、上記の文字列を実際にPDTからETに変換せずにLocalDateTime(またはタイムゾーンを気にしない他のjava時間オブジェクト)に解析します。

実際にパースする前に文字列からタイムゾーンを抜かずにこれを達成する方法はありますか?

+1

タイムゾーンを無視しながら日付文字列を解析する方法を説明するStackOverflowの質問と回答がかなりあるようです。あなたはそれらのいずれかを試しましたか?何がうまくいかなかったのですか? – DavidS

+0

C#にかなりの数があり、java.time APIを参照していないものがかなりあります。 java.timeを使用するものを見つけることができれば、それにリンクを張ることができればすばらしいでしょう。 –

+0

実際、あなたの質問と回答はより良いバージョンの1つだと思います。特にJava 8が2014年にリリースされたため、古い回答がより複雑になっています。 – DavidS

答えて

3

これはいかがですか?

String datestring = "2016-05-19 13:07:15 PDT"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss zzz"); 

LocalDateTime localDateTime = LocalDateTime.from(formatter.parse(datestring)); 
System.out.println(localDateTime); 
// Output: 2016-05-19T13:07:15 

編集:あなたはすでにZonedDateTimeオブジェクトを持っている場合は別の方法として、これも動作します(とタイムゾーンを削除します):

LocalDateTime.from(zonedDateTime); 
+0

ああ、これは動作します。私は 'LocalDateTime'として解析すると自動的にそれをETに変換すると仮定しました。サーバのローカル時間はETであり、' 2016-05-19 16:07:15'となるからです。が欲しいです。ありがとう。 –

+1

また、私はこの代わりの方法を使い終わった: 'LocalDateTime.parse(datestring、formatter);' –

0

異なるタイムゾーンに日付と時刻に対処するための最良の方法UTC (GMT +0)に日付と時刻を格納することであり、取得時にはリクエスタに基づいて希望のタイムゾーンに変換する必要があります。これは、複数のタイムゾーンを処理する必要がある場合に、将来の日付時間機能を拡張するのに役立ちます。