Java8时间解析异常
已知一个时间字符串,表示一年中的第几周,如2018-48
,2018年的第48周,想通过这个字符串来获取这周的星期一和星期天的时间
相关代码
// 返回 2018-48
String format = LocalDate.now().format(DateTimeFormatter.ofPattern("YYYY-w"));
//异常
LocalDate date = LocalDate.parse(format,DateTimeFormatter.ofPattern("YYYY-w"));
指定星期几即可
需要注意的是这里一周是从周日开始到周六结束的,
2018-48 2
表示的是2018年第48个星期的第二天也就是星期一,即2018年11月26日。题目中的写法异常的原因是,在仅知道年份和第几个星期而不知道是星期几的情况下,是无法得出一个精确到天的日期的。
也可以使用更直观一点的格式
每周从周一开始(使用ISO8601标准)
使用
DateTimeFormatter.ofPattern
创建的实例是按每周从周日开始计算的,如果要按每周从周一开始计算,则需要使用DateTimeFormatter.ISO_WEEK_DATE
,使用该实例解析的日期字符串须满足ISO8601标准要求,例如2018-W02-1
(2018年第2周的周一),2018-W48-7
(2018年第48周的周日)如果输入参数不满足ISO8601标准格式要求,则需要自行转换
需要注意的是,ISO8601的标准中,至少需要4天才能算作1周,如果某年的第一天是周五、周六或周日,那么这一年的第一周是从下一周开始的