ISO 8601定义了用于表示时间间隔的语法.
表达时间间隔有四种方式:
>开始和结束,例如“2007-03-01T13:00:00Z / 2008-05-11T15:30:00Z”
>开始和持续时间,例如“2007-03-01T13:00:00Z / P1Y2M10DT2H30M”
>持续时间和结束,例如“P1Y2M10DT2H30M / 2008-05-11T15:30:00Z”
>仅限持续时间,例如“P1Y2M10DT2H30M”,带有其他上下文信息
如果结束值中缺少任何元素,则假定它们与包括时区的起始值相同.标准的这一特征允许简洁地表示时间间隔.例如,包括开始和结束时间在内的两小时会议的日期可以简单地显示为“2007-12-14T13:30/15:30”,其中“/ 15:30”表示“/ 2007-12-” 14T15:30“(与开始时间相同),或每月结算期间的开始和结束日期为”2008-02-15 / 03-14“,其中”/ 03-14“表示”/ 2008-03 -14“(与开始的同一年).
另外,通过在间隔表达式的开头添加“R [n] /”来形成重复间隔,其中R用作字母本身,[n]由重复次数代替.省略[n]的值意味着无限次重复.因此,要从“2008-03-01T13:00:00Z”开始重复“P1Y2M10DT2H30M”的间隔五次,请使用“R5 / 2008-03-01T13:00:00Z / P1Y2M10DT2H30M”.
我正在寻找一个好的Java解析器(如果可能与Joda-Time库兼容)来解析这个语法.任何指向好图书馆的指针?
解决方法:
java.time
内置于Java 8及更高版本的java.time框架具有用于解析ISO 8601 formatted duration的Duration.parse
方法:
java.time.Duration d = java.time.Duration.parse("PT1H2M34S");
System.out.println("Duration in seconds: " + d.get(java.time.temporal.ChronoUnit.SECONDS));
以秒为单位的打印持续时间:3754