scala config duration scala-java-interop

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")