java

时间:2016-05-13 07:34:34

标签: java regex string format duration

我用Google搜索但无法找到任何可以验证输入字符串是否正确的ISO持续时间格式的解决方案,如果任何人有任何想法或解决方案可能正在使用正则表达式或函数,将会有很大帮助。

注意:持续时间的格式为[-]P[n]DT[n]H[n]M[n][.frac_secs]S,其中n指定元素的值(例如,4H为4小时)。这表示ISO持续时间格式的子集,任何其他持续时间字母(包括有效的ISO字母,如Y和M)都会导致错误。

Example 1,
input string = "P100DT4H23M59S";
expected output = 100 04:23:59.000000

Example 2,
input string = "P2MT12H";
expected output = error, because the month designator, '2M', isn't allowed.

Example 3,
input string = "100 04:23:59";
expected output = 100 04:23:59.000000

1 个答案:

答案 0 :(得分:2)

java.time.Duration

java.time 类在解析/生成文本时默认使用 ISO 8601 格式。

使用 Duration 类。

调用 Duration#parse 方法。遇到错误输入时抛出 DateTimeParseException 的陷阱。

String input = "P100DT4H23M59S";
try
{
    Duration duration = Duration.parse( input );
}
catch ( DateTimeParseException e )
{
    System.out.println( "ERROR - Faulty input." );
}

Java 中的 Duration 类表示不附加到时间线的时间跨度,以通用 24 小时制(不是日历日)、小时、分钟和秒为单位。 (对于日历日,请参阅 Period 课程。)

因此,Duration#parse 会自动拒绝您不需要的年、月和周输入。

String input = "P2MT12H";
try
{
    Duration duration = Duration.parse( input );
}
catch ( DateTimeParseException e )
{
    System.out.println( "ERROR - Faulty input." );
}

运行时:

<块引用>

错误 - 输入错误。