如何在一个表达式中指定日期和持续时间

问题描述:

我正在尝试为ISO8601格式的周期性事件查找符号。 它可以作为一个表达?如何在一个表达式中指定日期和持续时间

例如,事件开始于2017年3月31日17:25与周期性1小时:

2017-03-31T17:25:00Z/PT1H 

试图在Java中该表达解析到Duration

java.time.Duration d = java.time.Duration.parse("2017-03-31T17:25:00Z/PT1H"); 

导致异常。

+0

你也应该明白像java.time.Duration这样的时间量不是一个时间间隔,因为即时时间轴上的锚点缺失(没有定义的开始和结束)。因此,这种类型最多只能用于解析第二个组件“PT1H”,而不是更多。 –

在Iso-8601中,表达“2017-03-31T17:25:00Z/PT1H”不是一个复发间隔,而只是一个正常的瞬间/瞬间间隔。如果你寻找复发间隔,那么你必须用“Rn /”作为前缀,其中“n”是一个正整数(可选)。标准Java有间隔不支持,所以你必须要么使用字符串处理和部分解析代码自己的解决办法,或者你使用第三方库就像我的一个(Time4J):

MomentInterval interval = MomentInterval.parseISO("2017-03-31T17:25:00Z/PT1H"); 
System.out.println(interval); // [2017-03-31T17:25:00Z/2017-03-31T18:25:00Z) 

的时刻又见Javadoc间隔。对于经常性间隔请看这个类IsoRecurrence

互操作性注意事项:您可以通过方法toTemporalAccessor()轻松地将Moment组件转换为java.time.Instant