如何产生的XMLGregorianCalendar时间为UTC

问题描述:

我想创建一个具有以下特征的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); 
} 

为了得到你所提到的输出(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

在结尾处添加'Z'他的模式将完成这项工作。

DateTimeFormat.forPattern("HH:mm:ss'Z'");