2017-01-19 9 views
2

hibernateおよびjoda時間を使用してデータベースにDateTimeを格納するときに、私は奇妙な問題を抱えています。私は改訂日付でエンティティを保存する場合hibernateを使用してSQL Serverデータベースにjoda DateTimeを格納する方法

import org.joda.time.DateTime; 

public class RelationshipEntity { 

    @Column(name = "date_revision") 
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") 
    private DateTime dateRevision; 

    // other fields 
} 

私はTimeZone.setDefault(TimeZone.getTimeZone("Europe/Paris"));

とアプリケーションにヨーロッパ/パリ(GMT + 1)にタイムゾーンを設定しています

は、私はこのようなBeanを持っていますデータベースに2017-01-19 13:24に、私は2017-01-19 12:24に設定されているデータベースの日付を見ることができ、私はなぜ理解していない。

ため、データベースのタイムゾーンはまた、ヨーロッパ/パリのようだ:私は春ブートを使用すると、私はapplication.yml

jadira.usertype.autoRegisterUserTypes: true 
jadira.usertype.databaseZone: jvm 
jadira.usertype.javaZone: jvm 
に論文のプロパティを追加しようとしました

SELECT SYSDATETIME(); //2017-01-19 14:41

SELECT SYSUTCDATETIME(); // 2017-01-19 13:41

を実行し、引数-Duser.timezone=Europe/Parisでアプリケーションを起動しますが、それでも保存します日付をUTCでデータベースに格納します。私はLocalDateTimeDateTimeを変更し、問題解決するために

:この変更により

@Column(name = "date_revision") 
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime") 
private DateLocalTime dateRevision; 

を、データベース内dateRevisionは私が私のJava Bean内の設定と同じです。

タイプorg.joda.time.DateTimeを使用すると、日付をUTCに変換する理由を誰かから説明できますか?

注:私はそれは、あなたが気にしないときに使用されるべきであるUTCとのLocalDateTimeでzodaのDateTimeストアデシベルの日付は、日付を格納するため、これは2.5

+0

DBに時間を節約する際に普遍的な基準があるのは意味がありませんか? 2つの異なるタイムゾーンの2人のユーザーがそれを使用するとどうなりますか? – notanormie

+0

私のアプリケーションとデータベースのタイムゾーンが同じであれば、私はなぜjavaの日付とdbの日付の間に違いがあるのか​​わかりません。 DateTimeを使用しているときの日付をUTCで変換するデフォルトの動作ですか? –

答えて

3

を休止状態4使うとジョダタイムタイムゾーン。

タイムゾーン(日の節約など)を考慮する必要があるDateTimeの場合、そのように扱い、日付を世界時に格納します。

詳細については、answerを参照してください。

+0

あなたが正しいと思います。ドキュメント[PersistentDateTime](http://jadira.sourceforge.net/apidocs/org/jadira/usertype/dateandtime/joda/PersistentDateTime.html)は、_タイプがUTCタイムゾーンを使用して保存され、表示されていますJVMのデフォルトのゾーン_を使用しているJVMでは、この動作が発生します。 –

+0

はい、追加情報ありがとうございます:) @ oliv37 –

関連する問題