0

Oracle DB に DATE 型の列があります。06.09.12 は、そこに格納されている値の 1 つです。また、タイプ java.util.Date のメンバ フィールド「date」を持つ、テーブルにマップされた EJB エンティティもあります。ただし、getter メソッドは、テーブルに格納されている日付に 1 日を加えた日付を返します (例: 06.09.12 ではなく 07.09.12)。保存されている日付を正確に取得するにはどうすればよいですか? タイムスタンプの使用を検討する必要がありますか?

4

1 に答える 1

2

タイムゾーンが異なる場合があります。DB のタイムゾーンは、Java で設定されたタイムゾーンとは異なります。基になる時間は実際には同じですが、たとえば、DB の日付は GMT で解釈され、Java は東部時間として解釈されます。GMT の真夜中を過ぎると、GMT は 1 日進み、7 時間程度になります。

これらのタイムゾーンは両方ともデフォルトでサーバーのタイムゾーンになりますが、DB インストールと Java VM によってオーバーライドできます。

これが当てはまるかどうかをテストするには、Oracle で次のようにします。

select dbtimezone,sessiontimezone from dual;

そしてJavaで:

TimeZone tz = Calendar.getInstance().getTimeZone();
System.out.println("TimeZone: "+tz.getDisplayName());
于 2012-09-11T06:25:06.117 に答える