Собственный формат в XMLGregorianCalendar - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь сохранить формат YYYYww в XMLGregorianCalendar, но не смог найти никакого способа.Есть ли способ сохранить только год и неделю в XMLGregorianCalendar?

Я не смог найти решения, используя другой форматер.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Я бы поступил так:

    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

Ссылки

0 голосов
/ 18 мая 2018
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);

Решение.

...