在Java 8中按句点解析ISO日期

Ser*_*Cat 8 java datetime jodatime java-8 java-time

我想替换JodaTimeJava 8 DateTime API.

我有ISO-8601句号描述=P2W5DT11H8M

JodaTime我通过执行以下代码非常简单地解析它:

Period.parse("P2W5DT11H8M")我得到了成功的Period对象.

我可以在Java 8中做同样的事情吗?

ass*_*ias 5

Java 8中的Period仅包含年/月/日组件.持续时间具有小时/分钟/秒组件.您似乎需要手动解析字符串.一个选项可能看起来像下面的代码(您需要添加输入验证等) - 可能有更好的选择.

public static void main(String[] args) {
  System.out.println(PeriodAndDuration.parse("P2W5DT11H8M"));
}

public static class PeriodAndDuration {
  private final Period p;
  private final Duration d;

  public PeriodAndDuration(Period p, Duration d) {
    this.p = p;
    this.d = d;
  }

  public Period getPeriod() {
    return p;
  }

  public Duration getDuration() {
    return d;
  }

  public static PeriodAndDuration parse(String input) {
    int periodStart = input.indexOf("P");
    int timeStart = input.indexOf("T");
    Period p = Period.parse(input.substring(periodStart, timeStart));
    Duration d = Duration.parse("P" + input.substring(timeStart, input.length()));
    return new PeriodAndDuration(p, d);
  }

  @Override
  public String toString() {
    return p.toString() + d.toString();
  }
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*ern -4

简短回答:

Period period = Period.parse("P2W5DT11H8M");
Run Code Online (Sandbox Code Playgroud)

长答案:Oracle 对于何时使用 period 或 Duration有一个很好的描述。它附带了一些不错的代码示例,并且应该可以回答您可能遇到的任何后续问题。

  • 这将在运行时抛出异常。 (4认同)