簡體   English   中英

用Java解析持續時間的最干凈方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM