格式化XMLGregorianCalendar

时间:2016-07-28 09:58:38

标签: java simpledateformat gregorian-calendar

以下是我的代码

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

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

任何建议对我都有帮助

Atleast可以使用SimpleDateFormat获取此格式吗?

通过使用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版本中不确定

2 个答案:

答案 0 :(得分:0)

这样的东西?注意我没有使用格里高利不确定你是否想要特定的格里高利日历,在这种情况下你将不得不改变一点。

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年7月29日+ 05:30

答案 1 :(得分:0)

最简单的方法是重建JDK7功能。您必须知道新的 XXX 计算基于日历类的已有字段。 他们采用 Calendar.ZONE_OFFSET Calendar.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());

我希望这段代码可以帮助您从那里开始。