Conversión de Java a duraciones de Scala
config duration (2)
No conozco una manera mejor, pero puedes hacerlo un poco más corto:
Duration.fromNanos(d.toNanos)
y también envuélvelo en una conversión implícita
implicit def toFiniteDuration(d: java.time.Duration): FiniteDuration = Duration.fromNanos(d.toNanos)
(cambiado d.toNano
a d.toNanos
)
¿Existe alguna manera elegante de convertir java.time.Duration
a scala.concurrent.duration.FiniteDuration
?
Estoy intentando hacer el siguiente uso simple de Config en Scala:
val d = ConfigFactory.load().getDuration("application.someTimeout")
Sin embargo, no veo ninguna forma simple de usar el resultado en Scala. Ciertamente espero que las buenas personas de Typesafe no esperaban que hiciera esto:
FiniteDuration(d.getNano, TimeUnit.NANOSECONDS)
Editar: tenga en cuenta que la línea tiene un error, lo que demuestra el punto. Ver la respuesta seleccionada a continuación.
No sé si una conversión explícita es la única manera, pero si quieres hacerlo bien
FiniteDuration(d.toNanos, TimeUnit.NANOSECONDS)
toNanos
devolverá la duración total, mientras que getNano
solo tendrá el componente de nanosegundos, que no es lo que desea.
P.ej
import java.time.Duration
import jata.time.temporal.ChronoUnit
Duration.of(1, ChronoUnit.HOURS).getNano // 0
Duration.of(1, ChronoUnit.HOURS).toNanos // 3600000000000L
Dicho esto, también puede pasar su propia conversión implícita
implicit def asFiniteDuration(d: java.time.Duration) =
scala.concurrent.duration.Duration.fromNanos(d.toNanos)
y cuando lo tienes en alcance:
val d: FiniteDuration = ConfigFactory.load().getDuration("application.someTimeout")