好吧,这花了我比预期更长的时间。唯一有效的解析器是:
DateTimeFormatter dtf = new DateTimeFormatterBuilder() .appendValue(ChronoField.YEAR, 4) .appendPattern("[['-']MM[['-']dd[['T']HH[[':']mm[[':']ss['.'SSS]]]]]]") .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1) .parseDefaulting(ChronoField.DAY_OF_MONTH, 1) .parseDefaulting(ChronoField.HOUR_OF_DAY, 0) .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0) .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0) .parseDefaulting(ChronoField.NANO_OF_SECOND, 0) .toFormatter();String[] s = { "2018", "2018-10", "2018-10-15", "2018-10-15T12:00", "2018-10-15T12:00:30", "2018-10-15T12:00:30.123", "20181015", "201810151200", "20181015120030", "20181015120030.123", "20181015T12:00:30.123"};for (String line : s) { System.out.println(LocalDateTime.parse(line, dtf));}
问题是
yyyy创建一个
ValueParser(minWidth=4, maxWidth=19,SignStyle.PAD_EXEEDS)解析日期的a
20181015作为
year=20181015示例。因此我们必须将数字宽度限制
year为4。
该文档指出:
年 :字母的数目确定最小字段宽度,在该最小字段宽度以下使用填充。
但未指定最大宽度。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)