scala.concurrent.duration 包提供了初始化持续时间的能力,如下所示:
Duration("5 minutes")
我无法在 Java 中找到一个等价的方法来让我轻松地完成同样的事情。有什么建议(除了使用 Java 中的 scala 之外?)
最佳答案
Java 本身不处理任何持续时间格式。您将需要像Joda-Time这样的第三方库或我的库 Time4J为了做你想做的事。
Joda-Time(基于构建器):
PeriodFormatter pf =
new PeriodFormatterBuilder()
.appendMinutes()
.appendSuffix(" minute", " minutes")
.toFormatter();
Period p = pf.parsePeriod("5 minutes");
System.out.println(p); // PT5M
Time4J(基于模式):
Duration<ClockUnit> d =
Duration.formatter(ClockUnit.class, "{m: :en:ONE=minute:OTHER=minutes}")
.parse("5 minutes");
System.out.println(d); // PT5M
但是,此类解决方案通常存在以下限制。
- 此类过程通常仅适用于一种语言,因为文字是固定的。
- 内部格式结构通常不灵活(输入可能包含意外的单元)。
我对存储一段时间的建议:
您最好使用 ISO-8601 格式进行存储,并使用用户定义的格式进行表示。这种方式与语言无关,并且可以灵活地处理多个单元。示例:
使用 ISO 的 Joda-Time:
Period joda = ISOPeriodFormat.standard().parsePeriod("PT5M");
System.out.println(PeriodFormat.wordBased(Locale.ENGLISH).print(joda));
// 5 minutes
使用 ISO 的 Time4J:
Duration<ClockUnit> time4j = Duration.parseClockPeriod("PT5M");
System.out.println(PrettyTime.of(Locale.ENGLISH).print(time4j));
// 5 minutes
关于java - 在 Java 中解析持续时间的最简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33817496/