我正在使用 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);
}
}