首页 > 解决方案 > XMLGregorianCalendar 中的自己的格式

问题描述

我正在尝试将 YYYYww 格式保存在 XMLGregorianCalendar 中,但找不到任何方法。有没有办法只将年份和星期存储到 XMLGregorianCalendar 中?

通过使用不同的格式化程序,我找不到任何解决方案。

标签: javaformatgregorian-calendarxmlgregoriancalendar

解决方案


我会这样:

    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-04

您也可以不使用XMLGregorianCalendarsinceLocalDate.toString()生成完全相同的格式。

XML 没有一周的表示。我们需要选择一个日期。正如您自己的回答一样,我选择了一周的第一天,即星期一。parseDefaulting(ChronoField.DAY_OF_WEEK, 1)指定由于解析的字符串中没有星期几,所以应该使用星期的第一天。

顺便说一句,XML 日期格式类似于 ISO 8601,这是日期和时间格式的国际标准。但它不一样。在 ISO 8601 as(与 XML 相对)中,您可以用2017-W49. 如果您想制作:

    DateTimeFormatter isoWeekFormatter = DateTimeFormatter.ofPattern("YYYY-'W'ww");
    System.out.println(date.format(isoWeekFormatter));

输出:

2017-W49

链接


推荐阅读