我正在尝试将YYYYww格式保存为XMLGregorianCalendar格式,但找不到任何方法。有没有办法只将年份和星期存储到XMLGregorianCalendar中?
我无法通过使用不同的格式找到任何解决方案。
发布于 2018-05-18 17:43:01
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);解决方案。
发布于 2018-05-19 05:18:25
我会这样说:
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);使用201749的week字符串(2017年的第49周),代码段打印:
2017-12-04
也可以不使用XMLGregorianCalendar,因为LocalDate.toString()会生成完全相同的格式。
XML没有一周的表示形式。我们得选个日子。在你自己的答案中,我选择了一周的第一天,星期一。parseDefaulting(ChronoField.DAY_OF_WEEK, 1)指定由于字符串parsed中没有星期几,因此应使用星期的第一天。
另外,XML日期格式类似于日期和时间格式的国际标准ISO8601。但这是不一样的。在ISO8601AS(与XML相反)中,您可以用2017-W49格式表示日历周。如果你想生产它:
DateTimeFormatter isoWeekFormatter = DateTimeFormatter.ofPattern("YYYY-'W'ww");
System.out.println(date.format(isoWeekFormatter));输出:
2017-W49
链接
java.time.的与日期相关的options.
https://stackoverflow.com/questions/50408075
复制相似问题