JPA を使用してデータベースから日付を読み取る際に問題があります。私はEclipseLinkとPostgreSQLを使用しています
CSV ファイルからデータベースにデータを入力しました。魔女には日付が文字列として含まれていました (この形式: 6/30/2009-23:59:56
)。次のスニペットを使用して、Date オブジェクトに変換しました。
public static Date parseDate(String s){
DateFormat formatter = new SimpleDateFormat("d/M/yyyy-k:m:s");
try {
return new Date( ((java.util.Date)formatter.parse(s)).getTime() );
} catch (ParseException ex) {
Logger.getLogger(Type.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
日付は正しく変換され、期待どおりにデータベースに格納されます。Date オブジェクトをデータベースにマップする方法は次のとおりです。
@Column(name="data_ts", nullable=false)
@Temporal(TemporalType.TIMESTAMP)
private Date dataTs;
データベースから日付を読み取ってチャート(Highcharts)で使用しようとすると、問題が発生するようです。上記と同じタイムスタンプを持つレコードは、次のように読み取られます。
Mon Jun 06 23:59:56 BRT 2011
そしてそれはタイムスタンプです1307415596000
ブラジル時間 (+3h) であるため、(GMT から計算された) タイムスタンプは 3 時間ずれていることに注意してください。プロットされると、タイムスタンプは07/06/2011 02:59:56
次に例を示します。
List<TimedataEnt> timeData = currentWellsite.getTimeData();
String debug = timeData.get(timeData.size()-1).getDataTs().toString() + ">>>" + timeData.get(timeData.size()-1).getDataTs().getTime();
currentWellsiteは JPA エンティティであり、getDataTs()
java.util.Date オブジェクトを返します。文字列は"Tue Jun 30 23:59:56 BRT 2009>>>1246417196000"
データベースから読み取ったタイムスタンプを変換しないように JPA に指示するにはどうすればよいですか?