Собственный формат в XMLGregorianCalendar
Я пытаюсь сохранить формат YYYYww в XMLGregorianCalendar, но не смог найти никакого способа. Есть ли способ сохранить только год и неделю в XMLGregorianCalendar?
Я не мог найти какие-либо решения, используя другой форматер.
2 ответа
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);
Решение.
Я бы пошел так:
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
связи
- Лексическое представление даты и времени в XML. Пожалуйста, также см. Раздел 3.2.9 - 3.2.14 того же документа для опций, связанных с датой.
- Учебник Oracle: Дата и время, объясняющие, как использовать
java.time
,