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

时间:2017-03-31 19:33:40

标签: java intervals iso8601

我试图找到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");

导致例外。

1 个答案:

答案 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()