2011-05-02 40 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)