2017-08-03 62 views
1

我想創建一個具有以下特徵的XMLGregorianCalendar如何產生的XMLGregorianCalendar時間爲UTC

  • 時間只有
  • UTC時區(在 「Z」 結尾處附加)

所以我希望日期打印爲:18:00:00ZXML Date)。

該元素是一個xsd:time,我希望在XML中像這樣顯示時間。

<time>18:00:00Z</time> 

但我得到以下幾點:21:00:00 + 0000。我在-3偏移量,結果是用我的偏移量進行計算。

爲什麼我的代碼有問題?

protected XMLGregorianCalendar timeUTC() throws Exception { 
    Date date = new Date(); 
    DateFormat df = new SimpleDateFormat("HH:mm:ssZZ"); 
    df.setTimeZone(TimeZone.getTimeZone("UTC")); 
    String dateS = df.format(date); 
    return DatatypeFactory.newInstance().newXMLGregorianCalendar(dateS); 
} 

回答

1

爲了得到你所提到的輸出(18:00:00Z),你必須設置的XMLGregorianCalendar的時區偏移量爲0(setTimezone(0))有Z出現。您可以使用以下方法:

protected XMLGregorianCalendar timeUTC() throws DatatypeConfigurationException { 

     SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
     dateFormat.setTimeZone(TimeZone.getTimeZone(ZoneOffset.UTC)); 

     XMLGregorianCalendar xmlcal = DatatypeFactory.newInstance() 
      .newXMLGregorianCalendar(
       dateFormat.format(new Date())); 
     xmlcal.setTimezone(0); 

     return xmlcal; 
    } 

如果您想擁有完整的日期時間,則:

protected XMLGregorianCalendar timeUTC() throws DatatypeConfigurationException { 
     return DatatypeFactory.newInstance() 
      .newXMLGregorianCalendar(
       (GregorianCalendar)GregorianCalendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC))); 
    } 

的輸出中應該是這樣的:2017-08-04T08:48:37.124Z

+0

我已經更新了我的問題,我需要這樣的''在XML。 – BonanzaOne

+0

我已經更新了我的答案,請檢查它。它在我身邊運作! – mgyongyosi

+0

它的工作原理!當我使用Java 6時,我必須像這樣設置時區'TimeZone.getTimeZone(「UTC」)' – BonanzaOne

1

在結尾處添加'Z'他的模式將完成這項工作。

DateTimeFormat.forPattern("HH:mm:ss'Z'"); 
相關問題