カスタムコードを記述せずに、ScalaでString
をFiniteDuration
に解析することは可能ですか?
Duration
にはcreate
と呼ばれるメソッドがあります。これはString
を受け入れますが、Duration
を生成し、それをさらに使用してFiniteDuration
を作成する方法がわかりません。 Duration
には、FiniteDuration
インスタンスを生成するファクトリメソッドがいくつかありますが、それらは、パラメータを生成するために文字列を解析する必要があることを意味します(それらのシグネチャはlongとTimeUnit
を想定しています)。
私が言及するこれらのタイプはscala.concurrent.duration
からのものです。
ありがとうございました。
Duration
オブジェクトを作成するために、前述のメソッドを使用できます(または、単にapply
メソッドを使用します)。次に、それがFiniteDuration
であるかどうかをcollect
することで確認できます(FiniteDuration
はDuration
のサブタイプであるため)。ユースケースについて:
scala> val finite = Duration("3 seconds")
scala> val infinite = Duration("Inf")
scala> val fd = Some(finite).collect { case d: FiniteDuration => d }
fd: Option[scala.concurrent.duration.FiniteDuration] = Some(3 seconds)
scala> val id = Some(infinite).collect { case d: FiniteDuration => d }
id: Option[scala.concurrent.duration.FiniteDuration] = None
お役に立てば幸いです。
.toMinutes
および同様の関数を使用することも簡単な解決策です。
FiniteDuration(Duration("48 hours").toMinutes, MINUTES)
完全な例:
scala> import scala.concurrent.duration._
import scala.concurrent.duration._
scala> FiniteDuration(Duration("48 hours").toMinutes, MINUTES)
res0: scala.concurrent.duration.FiniteDuration = 2880 minutes