tl;博士
YearWeek.parse( "2017-W01" )
ISO 8601
或者解析成其他格式?
是的,使用其他格式。
在将日期时间值序列化为文本时使用标准的ISO 8601 格式。该标准包括support for week dates。
对于年份-周,将是四位数字、一个连字符、一个W,以及一年中的一周的两位数字。
2017-W01
明确您对“一周”的定义。 ISO 8601 的定义是:
- 第 1 周包含一年中的第一个星期四,并且
- 周一至周日运行。
所以年份有 52 周或 53 周。并注意在这个定义下,一年中的前几天可能是在上一年的时候进行周编号的。同样,一年中的最后几天可能是在下一年进行周编号时。
如果您想表示该周内的特定日期,请在周一至周日附加一个连字符和一个 1-7 的单个数字。
提示:要在您的计算机上默认查看 ISO 8601 周数,您可能需要调整操作系统设置。例如,在 macOS 上设置 System Preferences > Language & Region > Calendar > ISO 8601 以使 Calendar.app 等应用程序使用此标准定义显示周数。
2017-W01-7
顺便说一下,有几个类似的表示:
- 表示年份的序号日期和从 1 到 366 的年份数字是年份、连字符和三位数字:
2017-123
- 没有年份的月-日是两个连字符、月号、连字符和月号:
--01-07
请注意,问题中使用的Locale 在此处与标准 ISO 8601 格式无关。
YearWeek
不幸的是,几周内没有像 YearMonth 这样的对象......
啊,但是有这样的类。
对于直接代表一周年概念的类,请参阅correct Answer by Henrik。该答案显示了ThreeTen-Extra 库的类YearWeek。
YearWeek类可以直接解析生成标准格式的字符串。
YearWeek yw = YearWeek.parse( "2017-W01" );
您可以将YearWeek 对象与方法进行比较:compareTo、equals、isBefore、isAfter。
yw.isBefore( thatYw )
ThreeTen-Extra 项目提供了其他类,例如 YearQuarter,您可能会发现它们很有用。