gpt4 book ai didi

java - Java 中的 ISO 8601 时间间隔解析

转载 作者:IT老高 更新时间:2023-10-28 20:44:14 28 4
gpt4 key购买 nike

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”,带有额外的上下文信息

如果结束值中缺少任何元素,则假定它们与包括时区在内的开始值相同。该标准的这一特性允许简明地表示时间间隔。例如,包括开始和结束时间在内的两小时 session 的日期可以简单地显示为“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.time内置于 Java 8 及更高版本的框架具有 Duration.parse解析ISO 8601 formatted duration的方法:

java.time.Duration d = java.time.Duration.parse("PT1H2M34S");
System.out.println("Duration in seconds: " + d.get(java.time.temporal.ChronoUnit.SECONDS));

打印以秒为单位的持续时间:3754

关于java - Java 中的 ISO 8601 时间间隔解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15977637/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com