如何产生的XMLGregorianCalendar时间为UTC
问题描述:
我想创建一个具有以下特征的XMLGregorianCalendar
:如何产生的XMLGregorianCalendar时间为UTC
- 时间只有
- UTC时区(在 “Z” 结尾处附加)
所以我希望日期打印为:18:00:00Z(XML 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
答
在结尾处添加'Z'
他的模式将完成这项工作。
DateTimeFormat.forPattern("HH:mm:ss'Z'");
我已经更新了我的问题,我需要这样的''在XML。 – BonanzaOne
我已经更新了我的答案,请检查它。它在我身边运作! – mgyongyosi
它的工作原理!当我使用Java 6时,我必须像这样设置时区'TimeZone.getTimeZone(“UTC”)' – BonanzaOne