web-dev-qa-db-ja.com

Scala StringからのFiniteDuration

カスタムコードを記述せずに、ScalaでStringFiniteDurationに解析することは可能ですか?

Durationにはcreateと呼ばれるメソッドがあります。これはStringを受け入れますが、Durationを生成し、それをさらに使用してFiniteDurationを作成する方法がわかりません。 Durationには、FiniteDurationインスタンスを生成するファクトリメソッドがいくつかありますが、それらは、パラメータを生成するために文字列を解析する必要があることを意味します(それらのシグネチャはlongとTimeUnitを想定しています)。

私が言及するこれらのタイプはscala.concurrent.durationからのものです。

ありがとうございました。

12
user2916547

Durationオブジェクトを作成するために、前述のメソッドを使用できます(または、単にapplyメソッドを使用します)。次に、それがFiniteDurationであるかどうかをcollectすることで確認できます(FiniteDurationDurationのサブタイプであるため)。ユースケースについて:

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

お役に立てば幸いです。

20
ale64bit

.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
0
Philluminati