java - XMLGregorianCalendar 中的自己的格式
问题描述
我正在尝试将 YYYYww 格式保存在 XMLGregorianCalendar 中,但找不到任何方法。有没有办法只将年份和星期存储到 XMLGregorianCalendar 中?
通过使用不同的格式化程序,我找不到任何解决方案。
解决方案
我会这样:
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
您也可以不使用XMLGregorianCalendar
sinceLocalDate.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
链接
- XML 中日期时间的词法表示。另请参阅同一文档的第 3.2.9 至 3.2.14 节,了解与日期相关的选项。
- Oracle 教程:日期时间解释如何使用
java.time
.
推荐阅读
- reactjs - 如何用状态变量反应钩子替换对象值
- c# - Selenium Webdriver 找不到表格元素
- c++ - C++ 大型双端队列 - 程序需要很长时间才能退出?
- python - 检查两个整数范围是否重叠
- reactjs - 将对象附加到数组中,为什么“推”不起作用?
- ios - 使用 Create ML 创建模型并在元数据中查找类
- reactjs - 尝试在类组件中使用功能组件时出错
- sql-server - 在 SQL Server 表中创建澳大利亚日期
- r - 如何使用 ggplot2 修复 geom_text 的位置
- amazon-web-services - AWS 根用户权限被 S3 存储桶策略拒绝