5

我想创建一个XMLGregorianCalendar具有以下特征的:

  • 只有时间
  • 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);
}
4

2 回答 2

6

要获得您提到的输出 ( 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

于 2017-08-04T08:51:43.560 回答
1

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

DateTimeFormat.forPattern("HH:mm:ss'Z'");
于 2017-08-04T12:15:02.293 回答