この日付は、PostgreSQL9.1データベースのtimestamp without time zone
列にあります。
2012-11-17 13:00:00
これはUTCであることが意図されており、UNIXタイムスタンプ(EXTRACT epoch
)として選択することで確認しました。
int epoch = 1353157200; // from database
Date date = new Date((long)epoch * 1000);
System.out.println(date.toGMTString()); // output 17 Nov 2012 13:00:00 GMT
ただし、JPA / Hibernateを使用してこの日付を読み取ると、問題が発生します。これは私のマッピングです:
@Column(nullable=true,updatable=true,name="startDate")
@Temporal(TemporalType.TIMESTAMP)
private Date start;
Date
しかし、私が得るのは次のとおりです。
17 Nov 2012 12:00:00 GMT
なぜこれが起こっているのですか、そしてもっと重要なことに、どうすればそれを止めることができますか?
ある時点を普遍的に(java.util.Date
そうするように)保存したいだけであり、明らかにデータを破壊したくないことを除いて、タイムゾーンについてはあまり気にすることができなかったことに注意してください。
ご想像のとおり、データベースに接続するクライアントアプリケーションはUTC + 1(オランダ)にあります。
また、列タイプの選択は、timestamp without time zone
Hibernateがスキーマを自動的に生成したときに行われました。timestamp with time zone
代わりにそうすべきでしょうか?