2016-04-15 12 views
1

データベースに文字列として現在の時刻を格納する必要があります。時刻は異なるタイムゾーンになる可能性があるので、私はJava SE 8の新しいZonedDateTimeクラスを使用しています。ZonedDateTimeを文字列に変換する

は、私は、toString()メソッドが自動的に出力していることに気づく:

2016-04-15T17:40:49.305-05:00[America/Chicago] 

これもZonedDateTime.parseによって読み取り可能()と右の値に変換しているようです。

これらの値を保存していて、値をユーザーが判読可能な形式に変換する必要がない場合は、適切なタイムゾーンでデータを正確に保存する必要がありますか?たとえば、2つのZonedDateTimesをtoString()表現を格納してSQLデータベースに挿入し、後でZonedDateTime.parse()を使用してこれらの時間に読み込んだ場合、isAfter()やisBeforeいい?

間にステップがありませんか? Java 7でタイムゾーンを把握しようとすると、これはほとんど簡単に感じられます。

+0

文字列として保存する場合は、はい。問題は、日付の上にあるすべてのdb機能が緩んでいることです。文字列の/から文字列への変換のオーバーヘッドが常に発生します。 – dambros

答えて

1

はい、正確に日付が格納され、.parse()メソッドを使用すると、ZoneDateTimeの他のメソッドを使用できます。あなたのデータベースでソート関数を使用できるようにしたいのであれば、手動でZonedDateTimeをタイムスタンプに変換するかORMの機能を使ってそれを行う必要があります。

1

一般的に言えば、私のアプリケーションでは、任意のクラスの表現を解析することを避けることになります。 toString()は、人間が読めるバージョンのクラスを提供することを目的としているため、リリースからリリースに変更される可能性があります。

私はあなたが期待する1、例えば適用するフォーマットを強制することをお勧め:

String toStoreInDb = DateTimeFormatter.ISO_ZONED_DATE_TIME.format(zonedDateTime); 
... 
ZonedDateTime fromDb = 
ZonedDateTime.parse(stringFromDb, DateTimeFormatter.ISO_ZONED_DATE_TIME); 

アプリケーションがどのtoString()変化に抵抗するこの方法です。 さらに、このバグを見てください: Bug in ZonedDateTime.parse()

関連する問題