scala 来自字符串的Scala FiniteDuration

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/33678853/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-22 07:48:00  来源:igfitidea点击:

Scala FiniteDuration from String

scaladuration

提问by user2916547

Is it possible to parse a Stringinto a FiniteDurationin Scala without writing custom code?

是否可以在不编写自定义代码的情况下在 Scala 中将a 解析String为 a FiniteDuration

There is a method on Duration, called create, that accepts a String, however that produces a Durationand not sure how to further use it to create a FiniteDurationfrom it. There are a few factory methods on Durationthat produce FiniteDurationinstances, but those imply that I have to parse my string to produce their parameters (their signature expect a long and a TimeUnit).

有一个方法Duration叫做create,它接受 a String,但是它产生 aDuration并且不确定如何进一步使用它来从中创建 a FiniteDuration。有一些Duration生产FiniteDuration实例的工厂方法,但这些意味着我必须解析我的字符串以生成它们的参数(它们的签名需要一个 long 和 a TimeUnit)。

These types I mention are from scala.concurrent.duration.

我提到的这些类型来自scala.concurrent.duration.

Thank you.

谢谢你。

回答by ale64bit

You can use the method you mention in order to create a Durationobject (or simply use the applymethod). Then, you can check if it's a FiniteDurationby collecting it (since FiniteDurationis a sub-type of Duration), although there are several variants depending on your use case:

您可以使用您提到的方法来创建Duration对象(或简单地使用该apply方法)。然后,您可以FiniteDuration通过collecting来检查它是否是 a (因为它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

Hope it helped.

希望它有所帮助。

回答by Philluminati

Using .toMinutesand similar functions is also an easy solution.

使用.toMinutes和类似的功能也是一个简单的解决方案。

FiniteDuration(Duration("48 hours").toMinutes, MINUTES)

Full example:

完整示例:

scala> import scala.concurrent.duration._
import scala.concurrent.duration._

scala> FiniteDuration(Duration("48 hours").toMinutes, MINUTES)
res0: scala.concurrent.duration.FiniteDuration = 2880 minutes