我用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
答案 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." );
}
运行时:
<块引用>错误 - 输入错误。