我试图找到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 :(得分:2)
在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。
互操作性说明:您可以通过Moment
方法轻松将java.time.Instant
- 组件转换为toTemporalAccessor()
。