0

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);
    }
}
4

2 に答える 2

1

タイムスタンプが正しい時間を指定していると思われますが、正しいタイムゾーンで表示されません。2012-10-03T17:23:22.342 は 2012-10-03T19:23:22.342+02:00 と同じですが、前者の (非表示の) タイム ゾーンは +00:00 です。

于 2012-10-03T19:41:44.577 に答える