从Web服务响应中删除时区

时间:2011-05-02 20:22:38

标签: java .net web-services date

有没有办法从Web服务返回的Java Date对象中删除时区组件?

例如我的开始日期是12AM。我希望将其用作客户端当地时间的上午12点。

我认为如果soap消息没有时区组件,则使用本地时区。我还有两个其他选项可以在客户端进行算术运算(我真的不想做)或者创建一个新的日期类,将日,月和年保持为整数(我不需要时间信息)。后一种选择需要大量的重构,所以如果有办法在soap消息中切掉时区信息,那将是更好的选择。

客户端是用.NET编写的,所以如果有办法改变在客户端解释日期的方式,我会想到实现相同的目标。

2 个答案:

答案 0 :(得分:2)

我相信我找到了解决问题的方法。我使用@XmlJavaTypeAdapter来更改日期类封送到Xml的方式。

这是我使用的DateAdapter。

import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class DateAdapter extends XmlAdapter<String, Date> {
 // the desired format
 private String pattern = "yyyy-MM-dd";

 public String marshal(Date date) throws Exception {
 return new SimpleDateFormat(pattern).format(date);
 }

 public Date unmarshal(String dateString) throws Exception {
 return new SimpleDateFormat(pattern).parse(dateString);
 }
}

我在所有我想要使用“yyyy-MM-dd”日期格式的getter上使用了以下注释。

@XmlJavaTypeAdapter(value=DateAdapter.class, type=Date.class)

答案 1 :(得分:1)

Java Date个对象没有拥有时区组件。它们根本没有时区概念:自1970年1月1日午夜起,它们总是只有几毫秒。

我不太了解日期和时间的SOAP表示...如果你可以说服 date 是你需要的(而不是日期和时间)你可能没问题。否则,我建议您在UTC中执行所有操作,但视为客户端上的本地时间。如果您只处理日期,这不应该太糟糕 - 尽管您确实需要考虑午夜并不总是发生在每个时区的每个日期,或者它可能会发生两次。 ..

基本上遗憾的是.NET和Java都没有一个像样的内置日期和时间API。在Java上Joda Time,您希望通过它的声音使用LocalDate来表示完全您感兴趣的内容(当地时区的日期)。在.NET上,(最终)成为Noda Time但尚未准备就绪。即使这两者都存在于各自的基础平台中,您仍然需要说服SOAP对其进行适当的序列化:(