我正在使用webservices,插入记录,它返回XMLGregorianCalendar类型的时间戳值。我需要将其转换为java.sql.Timestamp值,所以我使用了这样的函数。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
服务器(web服务所在的位置)的时间比我的语言环境多2h,出于某种原因,我获得我的插入语言环境时间,转换后。 问题是我真的需要获取服务器时间,原因在数据库中,时间戳值与服务器匹配,并且由于时间戳的值不同,我在更新操作中遇到问题。
请,我将不胜感激任何形式的帮助。谢谢!
编辑: 我有点找到解决方案,但并不完全是我需要的。当我将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);
}
}
使用其他toGregorianCalendar方法指定时区,语言环境和其他XMLGregorianCalendar默认值。 –
问题是,我如何知道服务器的时区和区域设置。如果服务器改变它的时区或位置呢? – elcadro
您可以通过向服务器询问当前时间戳来确定服务器的时区。我的猜测是,根据你问题的日期,服务器在你的西边是2个时区。我不知道这是否对您有所帮助,但出于这个原因,服务器上的时间戳应始终使用格林尼治标准时间(GMT)时区进行存储。 –