scala.concurrent.duration包提供了一种初始化持续时间的功能,如下所示:
Duration("5 minutes")
我想不出Java中的等效方法,可以让我轻松地完成相同的工作。有什么建议(除了使用Java的scala之外?)
最佳答案
Java本身不处理任何持续时间格式。您将需要诸如Joda-Time或我的lib Time4J之类的3rd-party-library来完成您想要的事情。
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