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
Scala FiniteDuration from String
提问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

