我想创建一个具有以下特征的XMLGregorianCalendar
:
所以我希望将日期打印为: 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);
}
答案 0 :(得分:2)
要获得您已提及的输出(18:00:00Z
),您必须将XMLGregorianCalendar的timeZone偏移设置为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;
}
如果您想要完整的DateTime,那么:
protected XMLGregorianCalendar timeUTC() throws DatatypeConfigurationException {
return DatatypeFactory.newInstance()
.newXMLGregorianCalendar(
(GregorianCalendar)GregorianCalendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC)));
}
输出应该是这样的:2017-08-04T08:48:37.124Z
答案 1 :(得分:1)
Adding 'Z'
at the end of he pattern will do the job.
DateTimeFormat.forPattern("HH:mm:ss'Z'");