java - SOAP 服务中的时区不匹配

标签 java web-services soap

我的 SOAP 服务部署在具有 PDT 时区的服务器上。我正在从我的 java (adf) 代码调用该服务。该服务有一个强制参数,该参数以日期时间作为参数。这就是我所说的方法 -

           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           Date date = sdf.parse(startDate);
           GregorianCalendar c = new GregorianCalendar();
           c.setTime(date);   
           sdate = DatatypeFactory.newInstance().newXMLGregorianCalendar(c); 

SOAP 服务应该将此日期时间存储在数据库中,该数据库也在 PDT 时区的同一服务器中。现在,如果我尝试从其他时区使用此服务,它会将其转换为 PDT,然后存储在数据库中。

我希望该服务将相同的时间存储在我提供的数据库中,而不是转换它。任何想法,如何忽略时区。

最佳答案

我建议在数据库中存储具有相同(隐式)时区的所有日期时间。两个常见的约定是使用本地时间或祖鲁时间 (UTC+0)。决定此约定后,您可以存储所有日期时间,而无需显式添加时区信息。 (Postgress 甚至为此有一个单独的设置)。

因此,您必须在存储之前将所有传入的日期时间转换为数据库的隐式时区。有多种模式可以实现此目的,例如您在 ORM 框架中注册的过滤器或日期时间处理程序。

从服务返回日期时间时,常见约定是使用 Zulu 时间(附加“Z”)或 UTC(附加时区偏移量,例如“+02:00”)。

当直接返回到用户客户端(例如浏览器或应用程序)时,还可以选择本地化客户端的日期时间。这意味着客户端必须提供其时区,例如在 header 字段中、作为用户配置文件的一部分或在登录时(并存储在 HTTP session 中)。然后,您的组件(例如 MVC 应用程序中的 Controller )必须将此时区应用于数据库中的日期时间,然后再将其添加到响应中。

关于java - SOAP 服务中的时区不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30638456/

相关文章:

java - 方法调用 - 空参数字段

asp.net - 将 Entity Framework 与 Web 服务结合使用的最佳方法

java - 如何使用 jooq 连接 3 个表并迭代结果?

java - 如何添加两个内容为数字的字符数组?

java - 检索 List 中 Map 的值

java - 将 c# DateTime 序列化为 SAP Webservice 的 Java 时间和 Java 日期

java - 如何从 NetBeans 生成的类中取回原始对象以供 JAX-WS 传输?

java - 不转义 Spring WS SOAP 主体中的字符

java - 无法通过 KSOAP Android 登录到 Web 服务

soap - SoapUI 中请求的并行执行