当所有字段(包括分隔符,但不包括年份)为可选时,在Java8中解析ISO 8601日期

当所有字段(包括分隔符,但不包括年份)为可选时,在Java8中解析ISO 8601日期,第1张

当所有字段(包括分隔符,但不包括年份)为可选时,在Java8中解析ISO 8601日期

好吧,这花了我比预期更长的时间。唯一有效的解析器是:

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。

该文档指出:

:字母的数目确定最小字段宽度,在该最小字段宽度以下使用填充。

但未指定最大宽度。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5616310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存