3 回答

TA贡献1824条经验 获得超8个赞
您可以使用appendValue
此方法支持一种特殊的解析技术,称为“相邻值解析”。该技术解决了一个值(可变宽度或固定宽度)后跟一个或多个固定长度值的问题。标准解析器是贪婪的,因此它通常会窃取可变宽度值 1 之后的固定宽度值解析器所需的数字。
启动“相邻值解析”不需要任何操作。当调用 appendValue 时,构建器进入相邻值解析设置模式。
所以这有效:
LocalDate.parse( "201804", new DateTimeFormatterBuilder() .appendValue(YEAR, 4) .appendValue(ALIGNED_WEEK_OF_YEAR, 2) .parseDefaulting(WeekFields.ISO.dayOfWeek(), 1).toFormatter() );

TA贡献1906条经验 获得超10个赞
尝试明确定义计时字段:
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
DateTimeFormatter formatter =
builder.appendValue(ChronoField.YEAR, 4)
.appendValue(ChronoField.ALIGNED_WEEK_OF_YEAR, 2)
.parseDefaulting(ChronoField.DAY_OF_WEEK, 1)
.toFormatter();
LocalDate.parse("201804", formatter);

TA贡献1866条经验 获得超5个赞
是的,这也让我用国外来源的数据杀死了我很多次......
根据你得到的,你需要不同的解析器。对于日期,您需要 LocalDate,对于有时间的东西,您需要 LocalTimedate.parse。
意思是如果你不知道你得到什么数据(通常是当天没有日期但有时间,另一方面是过去的日期没有时间但有日期 - 所以你不知道),你必须先做一个粗略的解析自己以检测特定的格式,然后才让 Java 解析它.... Java 的日期处理有点困难。
所以解决方案是:使用 LocalDate 而不是 LocalTimeDate。
添加回答
举报