Я бы поступил так:
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
(49 неделя 2017 года), фрагмент кода печатает:
2017-12-04
Также возможно, что вы можете обойтись без 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
Ссылки