2011-05-02 48 views
0

是否有任何方法从正在从Web服务返回的Java Date对象中删除时区组件?从Web服务响应中删除时区

例如我有一个开始日期12AM。我希望在当地时间12点用于客户。

我认为,如果肥皂消息没有时区组件,那么使用本地时区。还有两个其他的选项我已经称过,可以在客户端进行算术运算(我真的不想这么做),也可以创建一个新的日期类,将日,月和年保存为整数(我不需要时间信息)。后面的选项需要大量的重构,所以如果有办法在soap消息中删除时区信息,那将是更可取的。

客户端是用.NET编写的,所以如果有方法来改变日期在客户端的解释方式,我会认为这将实现同样的目标。

回答

1

Java Date对象没有时区组件。他们根本没有时区概念:自1970年1月1日午夜以来,UTC始终只有毫秒。

我对日期和时间的SOAP表示不太了解......如果你能说服它,你只需要一个日期(而不是日期和时间),那么你可能会很好。否则,我建议你在UTC做所有事情,但认为它是客户端的本地时间。如果你只处理日期,这应该不会太糟糕 - 尽管你确实需要考虑午夜并不总是在每个时区的每个日期发生,或者它可能发生两次...

基本上可惜的是,.NET和Java都没有一个体面的内置日期和时间API。在Java上有Joda Time你想在其中听到LocalDate,代表,正好是你感兴趣的内容(在任何当地时区的日期)。在.NET上,(最终)为Noda Time,但尚未准备好。即使这两个都存在于各自的基础平台上,你仍然需要说服SOAP来适当地序列化它们:(

2

我相信我已经找到了解决方案,我的问题是使用@XmlJavaTypeAdapter来改变Date类被编组为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”日期格式。

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