XMLGregorianCalendar 型のタイムスタンプ値を返すレコードを挿入する Web サービスを使用しています。java.sql.Timestamp 値に変換する必要があるため、このような関数を使用します。
public static java.sql.Timestamp getSqlTimeStamp(XMLGregorianCalendar xgc) {
if (xgc == null) {
return null;
} else {
return new Timestamp(xgc.toGregorianCalendar().getTime().getTime());
}
}
Timestamp timestamp=getSqlTimeStamp(ExitInXMLGregor.getTimestamp());
私の問題は、サーバーでは、レコードを挿入したときのタイムスタンプ値が次のようになることです: 2012-10-03T19:23:22.342+02:00
しかし、型変換を行うと、次のようなタイムスタンプ値を取得します: 2012-10-03T17:23:22.342
サーバー (Web サービスが配置されている場所) の時間はロケールより 2 時間長く、何らかの理由で、変換後に挿入ロケール時間を取得します。問題は、実際にサーバー時間を取得する必要があることです。DB では、タイムスタンプの値がサーバーの値と一致し、タイムスタンプの値が異なるため、更新操作に問題があります。
よろしくお願いします。ありがとう!
編集:私は解決策を見つけましたが、私が必要としているものではありません。java.sql.Timestamp 形式のタイムスタンプを XMLGregorian に変換するときに、サーバーの timeZone を設定します (setTimeZone(TimeZone.getTimeZone("GMT+02:00")))。これは実際には機能しますが、理想的な解決策とはかけ離れています (タイムゾーンまたはサーバーが変更されることさえあります) この時点でサーバーのタイムゾーンを動的に知ることは素晴らしいことですが、方法がわかりません.. .
public static XMLGregorianCalendar getXMLGregorianCalendar(Timestamp timestamp)
throws BaseException {
try {
GregorianCalendar gc = new GregorianCalendar();
gc.setTimeZone(TimeZone.getTimeZone("GMT+02:00"));
gc.setTimeInMillis(timestamp.getTime());
return DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
} catch (DatatypeConfigurationException ex) {
throw new BaseException(ex);
}
}