簡體   English   中英

java.time.Duration中的錯誤

[英]Bug in java.time.Duration

我需要從字符串中解析持續時間 Java 8提供了一種以ISO-8601標准為基礎的方法:

Duration.parse("p10d"); // parses as ten days
Duration.parse("pt1h"); // parses as one hour

由於標准規定“允許通過共同協議省略'T'字符”, 持續時間的一些Javadoc例子中沒有留下T 據他們說,以下表達式應解析為“-6小時+3分鍾”:

"P-6H3M"

但是我發現所有表達式都省略了T拋出一個DateTimeParseException 這是parse()方法中的錯誤還是我錯過了什么?

JavaDocparse()

ASCII字母“T” 必須出現在第一次出現(如果有) 小時分鍾節之前。

這意味着無論何時使用HMS ,都必須包含T


但是這些例子是錯誤的:

"P-6H3M"    -- parses as "-6 hours and +3 minutes"
"-P6H3M"    -- parses as "-6 hours and -3 minutes"
"-P-6H+3M"  -- parses as "+6 hours and -3 minutes"

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之間存在不一致。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM