【问题标题】:Own format in XMLGregorianCalendarXMLGregorianCalendar 中的自己的格式
【发布时间】:2018-10-28 16:53:10
【问题描述】:

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

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

【问题讨论】:

  • 请展示您最近的尝试,以便我们可以使用。
  • 一个想法,也许你可以用the YearWeek class of ThreeTen-Extra代替XMLGregorianCalendar?不过,这意味着外部依赖。但是不,XMLGregorianCalendar 不知道基于周的年份和周数的概念。

标签: java format gregorian-calendar xmlgregoriancalendar


【解决方案1】:

我会这样:

    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);

使用201749week 字符串(2017 年第 49 周)sn-p 打印:

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

链接

【讨论】:

    【解决方案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);
    

    解决办法。

    【讨论】:

    • 我尝试了 week 等于 201749(2017 年第 49 周)并预期 2017-12-04(2017 年 12 月 4 日)。我得到了2018-12-03T14:17:38.136+01:00。它没有选择年份,它包括一天中的时间和时区偏移——可能来自我的计算机设置。
    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2014-10-28
    • 2012-12-13
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    相关资源
    最近更新 更多