我正在尝试在XMLGregorianCalendar中保存YYYYww格式,但无法找到任何方法。有没有办法只将年份和星期存储到XMLGregorianCalendar中?
我使用不同的格式化合物找不到任何解决方案。
答案 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
java.time
。