首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java.time.Duration中的错误

java.time.Duration中的错误
EN

Stack Overflow用户
提问于 2015-03-10 16:17:03
回答 1查看 1.9K关注 0票数 17

我需要从字符串中解析Durations。Java8提供了一种以ISO-8601标准为基础的方法:

代码语言:javascript
复制
Duration.parse("p10d"); // parses as ten days
Duration.parse("pt1h"); // parses as one hour

正如标准规定的那样,“经双方同意,允许省略'T‘字符”,Durations.parse()的一些Javadoc示例省略了T。根据他们的说法,以下表达式应解析为"-6小时+3分钟“:

代码语言:javascript
复制
"P-6H3M"

但是我发现所有省略T的表达式都会抛出DateTimeParseException。这是parse()方法中的错误,还是我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2015-03-10 16:27:02

Duration.parse使用的正则表达式是:

代码语言:javascript
复制
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与此正则表达式不匹配。如果将其更改为

代码语言:javascript
复制
"(T?(?:([-+]?[ ...

在第四行中(注意T后面的? ),示例匹配(在http://regexpal.com/上测试它)。

因此,看起来您发现了代码和JavaDoc之间的不一致。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28958870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档