我正在尝试以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");


结果例外。

最佳答案

在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()

关于java - 如何在一个表达式中指定日期和持续时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43148390/

10-14 17:03
查看更多