如何将 XMLGregorianCalendar 时间生成为 UTC

How to generate XMLGregorianCalendar time as UTC

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

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