格式 XMLGregorianCalendar

Format XMLGregorianCalendar

下面是我的代码

GregorianCalendar gregory=new GregorianCalendar();
gregory.setTime(new Date());
XMLGregorianCalendar xmlGregorianCalendar=DatatypeFactory.newInstance().newXMLGregorianCalendar(gregory);
System.out.println(xmlGregorianCalendar.toString());

当我在上面代码的最后一行打印 SOP 时,得到的输出类似于

2016-07-28T15:25:47.064+05:30

但我正在尝试将输出设为

2016-07-28+05:30

我尝试了不同的格式化程序,但没有成功。

任何建议都会对我有很大帮助

至少我们可以使用 SimpleDateFormat 获得这种格式吗?

通过使用简单日期格式,我能够得到“2016-07-29+0530”。如果我们可以在“05”和“30”之间加上“:”,请告诉我。我的代码如下

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddZ");

在 Java 版本 7 和 8 中,可以使用下面的方法获得

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddXXX");

但不确定 java 6 版本

是这样的吗?请注意,我没有使用 Gregorian,不确定您是否想要特定的 Gregorian Calender,在这种情况下,您将不得不稍作更改。

ZoneOffset myOffset = ZonedDateTime.now().getOffset();
System.out.println("ZoneOffset is " + myOffset.getId());
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String currentDate = dateFormat.format(new Date());
System.out.println(currentDate + myOffset.getId());

这会打印:

ZoneOffset 为 +05:30

2016-07-29+05:30

最简单的方法是重建 JDK7 功能。您必须知道新的 XXX 计算是基于 Calendar class。 他们取 Calendar.ZONE_OFFSETCalendar.DST_OFFSET 然后像这样从那里开始:

    int totalOffset = calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET);

    StringBuilder sb = new StringBuilder();

    //handle zero offset
    if (totalOffset == 0) {
        sb.append('Z');
    }

    //convert to minutes because timezones are minute based
    totalOffset = totalOffset / 60000;
    char prefix = '-';
    if (totalOffset >= 0) {
        prefix = '+';
    }
    sb.append(prefix);

    //if negative offset, invert now
    totalOffset = Math.abs(totalOffset);

    sb.append(String.format("%02d", (totalOffset / 60)));
    sb.append(':');
    sb.append(String.format("%02d", (totalOffset % 60)));

    System.out.println(sb.toString());

我希望这段代码能帮助你从那里开始。