2017-03-27 9 views
0

こんにちは私は、 "2017-03-24 06:01:33"のような日付を持つテーブルをUTCに持っています。私のJavaプログラムでは、文字列として受け取る必要があります。クライアントのオフセット時間と分を使用してローカル日付文字列に変換する方法は?UTCからローカル日付への変換

+1

http://stackoverflow.com/questions/31395441/convert-utc-date-to-local-date – soorapadman

答えて

2

を使用します。

OffsetDateTime odt = LocalDateTime.parse(dateFromDb, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss")) 
      .atOffset(ZoneOffset.UTC); 
    String localDateString = odt.atZoneSameInstant(ZoneOffset.ofHoursMinutes(5, 30)) 
      .toLocalDateTime() 
      .toString(); 

私は、時間と分のオフセットとして使用すると、クライアントのタイムゾーンを持っていると仮定しています。その後、それらをZoneOffset.ofHoursMinutes()に渡すことができます。クライアントタイムゾーンが夏時間(夏時間)を年のいくつかの年(米国の大部分の場合のように)を使用する場合は、日付が落ちる年の時間オフセットを取得する必要があることに注意してください。クライアントのタイムゾーンを指定する他の方法は、ZoneId.systemDefault()またはZoneId.of("Asia/Kolkata")です。これにより、サマータイムのルールが分かり、安全になる場合があります。

コードを印刷:

2017-03-24T11:31:33 

あなたは予想通り、それは5時間半先行入力文字列のだ気づきます。

時間だけでなく日付が必要な場合は、toLocalDateTime()の代わりにtoLocalDate()を使用してください。

上記のすべてにはJava 8が必要です。または、Java 8日時クラスのバックポートをJava 6および7に変更する方法については、ThreeTen Backportを参照してください。 Java 8を使用できず、バックポートに依存したくない場合は、this question: Not able to parse UTC date time to EST local timeのインスピレーションを見つけてください。

+0

V.Vここで私はクライアントのオフセットデータをどこに与えますか?私はZoneOffset.UTCがサーバーのオフセットを取ることを願っていますか? – Virat

+0

私の編集は@Sandeshaについて説明していますか?あなたはクライアントからタイムゾーン文字列を取得していますか? –

+0

私は現地オフセット分とオフセット時間を取得しています... "2017-03-24 06:01:33" UTCはインドではローカルで、インドのオフセット時間は5、オフセット分は30米国の現地日付と同じUTC日付を表示する必要がある場合は、米国のオフセット時間と分を取得します – Virat

0

は、私はどうしたらこの

simpleDateFormat.setTimeZone("Your-Client's-Timezone"); 
+0

これを使用する方法は? UTC String "2017-03-24 06:01:33"と "yyyy-mm-dd"の形式でローカル文字列を取得する方法はどこに渡す必要がありますか? @Sandeep – Virat

+0

@Sandesha、JavadocsでSimpleDateFormatをチェックしましたか? –

+1

私の謙虚な意見では、AskerがJava 8でよりプログラマフレンドリーな日時のクラスを使用できるときに、 'SimpleDateFormat'のような古い/古いクラスを提案するべきではありません。 –

関連する問題