2012-10-03 48 views
0

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

使用其他toGregorianCalendar方法指定时区,语言环境和其他XMLGregorianCalendar默认值。 –

+0

问题是,我如何知道服务器的时区和区域设置。如果服务器改变它的时区或位置呢? – elcadro

+0

您可以通过向服务器询问当前时间戳来确定服务器的时区。我的猜测是,根据你问题的日期,服务器在你的西边是2个时区。我不知道这是否对您有所帮助,但出于这个原因,服务器上的时间戳应始终使用格林尼治标准时间(GMT)时区进行存储。 –

回答

0

我怀疑时间戳确实指定了正确的时间,只是不显示正确的时区。假设前者的(隐藏)时区为+00:00,则2012-10-03T17:23:22.342与2012-10-03T19:23:22.342 + 02:00相同。

+0

我很确定,但问题是这次(2012-10-03T17:23:22.342)值与数据库时间戳(2012-10-03T19:23:22.342)不匹配。而事情是...我该如何解决它? – elcadro

+0

java.sql.Timestamp表示即时。它实际上根本不知道时区。其默认字符串显示位于错误时区的事实不会影响它的许多用途。 您提到“更新操作中的问题”。究竟出了什么问题?你可以使用不符合要求的时间戳发布代码吗? –

+0

这个问题很容易理解。当我插入内容时,webservice会将新记录的ID和Timestamp(以XMLGregorianCalendar类型)返回给我。在那之后,我尝试更新相同的记录,所以我需要通过带有Id和时间戳的bean,但很明显我有和BD中的时间戳不匹配。 – elcadro