[英]Cleanest way to parse duration in Java
scala.concurrent.duration包提供了一種初始化持續時間的功能,如下所示:
Duration("5 minutes")
我想不出Java中的等效方法,可以讓我輕松地完成相同的工作。 有什么建議(除了使用Java的scala之外?)
Java本身不處理任何持續時間格式。 您將需要像Joda-Time或我的lib Time4J之類的3rd-party庫來完成您想要的事情。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.