在Java 8中按Period解析ISO日期



我想用Java 8 DateTime API代替JodaTime

我已经描述了ISO-8601周期= P2W5DT11H8M

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

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

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

Java 8中的Period只有年/月/日组件。Duration有小时/分钟/秒组成部分。看起来您需要手动解析字符串。一个选项可能看起来像下面的代码(你需要添加输入验证等)-可能有更好的选择。

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();
  }
}

PeriodDuration

Period.parse (P2W5DT11H8M)

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

是的。

org.threeten.extra.PeriodDuration.parse( "P2W5DT11H8M" )

ThreeTen-Extra项目

java。Java 8及以后版本中内置的time类由ThreeTen-Extra项目补充。这个项目是由与运行Joda-Time和JSR 310 (java.time的规范)的人Stephen Colebourne运行的。

该项目提供了结合了java.timePeriodDuration类的思想的PeriodDuration

PeriodDuration.parse的文档说:

从文本字符串(如PnYnMnDTnHnMnS)中获取实例。

PeriodDuration pd = PeriodDuration.parse( "P2W5DT11H8M" ) ;
<标题>警告h1> 使用PeriodDuration之前要三思。

年-月-日和时-分-秒这两个概念在java中是分开的。时间是有原因的。如果你仔细考虑一下,你可能会发现在实践中把两者结合起来可能没有意义。

如果要继续使用这个类,请务必研究文档及其行为。练习一些场景,看看它是否符合你的期望和需要。


<标题>对 java.time

java。time框架内置于Java 8及以后版本中。这些类取代了麻烦的旧的遗留日期时间类,如java.util.Date, Calendar, &SimpleDateFormat .

Joda-Time项目,现在处于维护模式,建议迁移到java。时间类。

要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获得许多示例和解释。规格为JSR 310。

可以交换java。Time 直接与数据库关联。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要java.sql.*类。

从哪里获取java。时间类?

  • Java SE 8Java SE 9Java SE 10
    • 内置。
    • 标准Java API的一部分,捆绑实现。
  • Java 9增加了一些小的特性和修复。
  • Java SE 6Java SE 7
    • 大部分java。时间功能向后移植到Java 6;7在 ThreeTen-Backport
  • Android
    • Android版本的java bundle实现。时间类。
    • 对于早期的Android (<26), ThreeTenABP项目适应ThreeTen-Backport(如上所述)。参见如何使用ThreeTenABP…
  • ThreeTen-Extra项目扩展了java。有额外课程的时间。这个项目是将来可能添加到java.time的试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等。

    简短回答:

    Period period = Period.parse("P2W5DT11H8M");
    

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

    相关内容

    • 没有找到相关文章

    最新更新