Java中解析持续时间的最干净方法

Java中解析持续时间的最干净方法,java,jodatime,Java,Jodatime,scala.concurrent.duration包提供了初始化持续时间的能力,如下所示: Duration("5 minutes") 我无法在Java中找到一个等价物,使我能够轻松地做到这一点。任何建议(除了从Java使用scala?)Java本身不处理任何持续时间格式。您将需要第三方库,如或我的库,以便做您想要的 Joda时间(基于建筑商): PeriodFormatter pf = new PeriodFormatterBuilder() .appendMinutes(

scala.concurrent.duration包提供了初始化持续时间的能力,如下所示:

Duration("5 minutes")

我无法在Java中找到一个等价物,使我能够轻松地做到这一点。任何建议(除了从Java使用scala?)

Java本身不处理任何持续时间格式。您将需要第三方库,如或我的库,以便做您想要的

Joda时间(基于建筑商):

PeriodFormatter pf = 
    new PeriodFormatterBuilder()
    .appendMinutes()
    .appendSuffix(" minute", " minutes")
    .toFormatter();
Period p = pf.parsePeriod("5 minutes");
System.out.println(p); // PT5M
Duration<ClockUnit> d = 
  Duration.formatter(ClockUnit.class, "{m: :en:ONE=minute:OTHER=minutes}")
  .parse("5 minutes");
System.out.println(d); // PT5M
Period joda = ISOPeriodFormat.standard().parsePeriod("PT5M");
System.out.println(PeriodFormat.wordBased(Locale.ENGLISH).print(joda)); 
// 5 minutes
Duration<ClockUnit> time4j = Duration.parseClockPeriod("PT5M");
System.out.println(PrettyTime.of(Locale.ENGLISH).print(time4j)); 
// 5 minutes
Time4J(基于模式):

PeriodFormatter pf = 
    new PeriodFormatterBuilder()
    .appendMinutes()
    .appendSuffix(" minute", " minutes")
    .toFormatter();
Period p = pf.parsePeriod("5 minutes");
System.out.println(p); // PT5M
Duration<ClockUnit> d = 
  Duration.formatter(ClockUnit.class, "{m: :en:ONE=minute:OTHER=minutes}")
  .parse("5 minutes");
System.out.println(d); // PT5M
Period joda = ISOPeriodFormat.standard().parsePeriod("PT5M");
System.out.println(PeriodFormat.wordBased(Locale.ENGLISH).print(joda)); 
// 5 minutes
Duration<ClockUnit> time4j = Duration.parseClockPeriod("PT5M");
System.out.println(PrettyTime.of(Locale.ENGLISH).print(time4j)); 
// 5 minutes
Time4J使用ISO:

PeriodFormatter pf = 
    new PeriodFormatterBuilder()
    .appendMinutes()
    .appendSuffix(" minute", " minutes")
    .toFormatter();
Period p = pf.parsePeriod("5 minutes");
System.out.println(p); // PT5M
Duration<ClockUnit> d = 
  Duration.formatter(ClockUnit.class, "{m: :en:ONE=minute:OTHER=minutes}")
  .parse("5 minutes");
System.out.println(d); // PT5M
Period joda = ISOPeriodFormat.standard().parsePeriod("PT5M");
System.out.println(PeriodFormat.wordBased(Locale.ENGLISH).print(joda)); 
// 5 minutes
Duration<ClockUnit> time4j = Duration.parseClockPeriod("PT5M");
System.out.println(PrettyTime.of(Locale.ENGLISH).print(time4j)); 
// 5 minutes
Duration time4j=Duration.parseClockPeriod(“PT5M”);
System.out.println(PrettyTime.of(Locale.ENGLISH).print(time4j));
//5分钟

如果您寻找非scala解决方案,但最终想要获得scala持续时间,那么您还将获得额外的转换开销,因此您可能会继续使用scala。如果需要规范化或国际化等特殊功能,我只会选择另一个库。还要记住,Java库主要不是为scala编写的。