0

我正在使用 web 服务,插入记录,返回 XMLGregorianCalendar 类型的时间戳值。我需要将它转换为 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

服务器中的时间(webservice 所在的位置)比我的语言环境多 2 小时,由于某种原因,我在转换后获得了插入语言环境时间。问题是我确实需要获取服务器时间,因为在数据库中,时间戳值与服务器一匹配,并且由于时间戳值不同,我在更新操作中遇到问题。

请,我将不胜感激任何帮助。谢谢!

编辑:我有点找到解决方案,但不完全是我需要的。当我将 java.sql.Timestamp 格式的时间戳转换为 XMLGregorian 时,我设置了服务器的时区 (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 回答
1
于 2018-07-07T23:02:02.220 回答