XMLGregorianCalendar中的自有格式

时间:2018-05-18 09:27:27

标签: java format gregorian-calendar xmlgregoriancalendar

我正在尝试在XMLGregorianCalendar中保存YYYYww格式,但无法找到任何方法。有没有办法只将年份和星期存储到XMLGregorianCalendar中?

我使用不同的格式化合物找不到任何解决方案。

2 个答案:

答案 0 :(得分:0)

String week = data.getWeek();
week = week.substring(4,6);

Calendar cal = Calendar.getInstance();
cal.set(Calendar.WEEK_OF_YEAR, Integer.parseInt(week));
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
Date date = cal.getTime();

GregorianCalendar c = new GregorianCalendar();
c.setTime(date);
return DatatypeFactory.newInstance().newXMLGregorianCalendar(c);

解决方案。

答案 1 :(得分:0)

我会这样:

    DateTimeFormatter yearWeekFormatter = new DateTimeFormatterBuilder()
            .appendPattern("YYYYww")
            .parseDefaulting(ChronoField.DAY_OF_WEEK, 1)
            .toFormatter();
    LocalDate date = LocalDate.parse(week, yearWeekFormatter);
    XMLGregorianCalendar newXgc = DatatypeFactory.newInstance()
            .newXMLGregorianCalendar(date.toString());
    System.out.println(newXgc);

使用week字符串201749(2017年第49周),代码段打印出来:

  

2017年12月4日

由于XMLGregorianCalendar生成完全相同的格式,因此您可能没有LocalDate.toString()

XML没有一周的表示。我们需要选择一个日期。在你自己的回答中,我选择了一周的第一天,即周一。 parseDefaulting(ChronoField.DAY_OF_WEEK, 1)指定由于解析后的字符串中没有星期几,因此应使用一周的第一天。

除此之外,XML日期格式类似于ISO 8601,这是日期和时间格式的国际标准。但它不一样。在ISO 8601中(与XML相对),您可以使用2017-W49格式表示日历周。如果你想制作它:

    DateTimeFormatter isoWeekFormatter = DateTimeFormatter.ofPattern("YYYY-'W'ww");
    System.out.println(date.format(isoWeekFormatter));

输出:

  

2017-W49

链接