我需要从字符串中解析Durations。Java8提供了一种以ISO-8601标准为基础的方法:
Duration.parse("p10d"); // parses as ten days
Duration.parse("pt1h"); // parses as one hour
正如标准规定的那样,“经双方同意,允许省略'T‘字符”,Durations.parse()的一些Javadoc示例省略了T
。根据他们的说法,以下表达式应解析为"-6小时+3分钟“:
"P-6H3M"
但是我发现所有省略T
的表达式都会抛出DateTimeParseException
。这是parse()
方法中的错误,还是我遗漏了什么?
发布于 2015-03-10 16:27:02
Duration.parse
使用的正则表达式是:
private static final Pattern PATTERN =
Pattern.compile("([-+]?)P(?:([-+]?[0-9]+)D)?" +
"(T(?:([-+]?[0-9]+)H)?(?:([-+]?[0-9]+)M)?(?:([-+]?[0-9]+)(?:[.,]([0-9]{0,9}))?S)?)?",
Pattern.CASE_INSENSITIVE);
输入P-6H3M
与此正则表达式不匹配。如果将其更改为
"(T?(?:([-+]?[ ...
在第四行中(注意T
后面的?
),示例匹配(在http://regexpal.com/上测试它)。
因此,看起来您发现了代码和JavaDoc之间的不一致。
https://stackoverflow.com/questions/28958870
复制相似问题