Пакет scala.concurrent.duration
пакет duration
- Источник
- package.scala
- Линейные надтипы
- AnyRef, Any
Члены типов
служебный классDeadline extends Ordered[Deadline] with Product with Serializable
Этот класс хранит крайний срок, полученный с помощью Deadline.now или языка выражений для продолжительности:
import scala.concurrent.duration._ 3.seconds.fromNow
Его основное назначение — управление повторными попытками достижения чего-либо (например, ожидания условия) путём предоставления методов hasTimeLeft и timeLeft. Все продолжительности измеряются в соответствии с System.nanoTime; это не учитывает изменения системного времени (например, високосные секунды).
явное конечное классDoubleMult extends AnyVal
запечатанный абстрактный классDuration extends Serializable with Ordered[Duration]
Утилита для работы с продолжительностями java.util.concurrent.TimeUnit.
Этот класс не предназначен для общего представления времени, он оптимизирован для потребностей scala.concurrent.
Базовое использование
Примеры:
import scala.concurrent.duration._ val duration = Duration(100, MILLISECONDS) val duration = Duration(100, "millis") duration.toNanos duration < 1.second duration <= Duration.Inf
Вызов невыразимых преобразований (например, вызов toSeconds для бесконечной продолжительности) приведёт к исключению IllegalArgumentException.
Также предоставляются неявные преобразования для Int, Long и Double. Пример использования:
import scala.concurrent.duration._ val duration = 100.millis
Язык выражений, предоставляемый неявными преобразованиями, всегда позволяет создавать конечные продолжительности, даже для бесконечных входных данных Double; используйте Duration.Inf вместо этого.
Также включены извлечение, разбор и арифметика:
val d = Duration("1.2 µs")
val Duration(length, unit) = 5 millis
val d2 = d * 2.5
val d3 = d2 + 1.millisecond
Обработка единиц времени
Вычисления, выполняемые с конечными продолжительностями, всегда сохраняют более точную единицу одного из операндов, независимо от того, может ли более грубая единица точно выразить ту же продолжительность. Это означает, что Duration можно использовать в качестве безналогового контейнера для пары (длина, единица), если он создаётся с помощью соответствующих методов и не выполняется арифметическое действие над ним; сложение/вычитание продолжительностей в этом случае следует проводить с осторожностью.
Соответствие семантике Double
Семантика арифметических операций с продолжительностью имеет двойной характер:
-
точная операция сложения/вычитания с разрешением в наносекунды для конечных продолжительностей, независимо от величины слагаемыхизоморфно
java.lang.Double в отношении бесконечных или неопределенных значенийПреобразование между Duration и Double выполняется с помощью Duration.toUnit (с единицей NANOSECONDS) и Duration.fromNanos(Double)
Сортировка
По умолчанию используется порядок, согласованный с порядком чисел Double, что означает, что Undefined считается большим, чем все другие продолжительности, включая Duration.Inf.
трактDurationConversions extends Any
явное конечное классDurationDouble extends AnyVal with DurationConversions
явное конечное классDurationInt extends AnyVal with DurationConversions
явное конечное классDurationLong extends AnyVal with DurationConversions
конечный классFiniteDuration extends Duration
Этот класс представляет конечную продолжительность. Его операторы сложения и вычитания перегружены, чтобы сохранить эту гарантию статически. Диапазон этого класса ограничен +-(2^63-1)ns, which is roughly 292 years.
явное конечное классIntMult extends AnyVal
явное конечное классLongMult extends AnyVal
типTimeUnit = java.util.concurrent.TimeUnit
Значения членов
final val DAYS: java.util.concurrent.TimeUnit(DAYS)
final val HOURS: java.util.concurrent.TimeUnit(HOURS)
final val MICROSECONDS: java.util.concurrent.TimeUnit(MICROSECONDS)
final val MILLISECONDS: java.util.concurrent.TimeUnit(MILLISECONDS)
final val MINUTES: java.util.concurrent.TimeUnit(MINUTES)
final val NANOSECONDS: java.util.concurrent.TimeUnit(NANOSECONDS)
final val SECONDS: java.util.concurrent.TimeUnit(SECONDS)
implicit def durationToPair(d: Duration): (Long, TimeUnit)
implicit def pairIntToDuration(p: (Int, TimeUnit)): Duration
implicit def pairLongToDuration(p: (Long, TimeUnit)): FiniteDuration
object Deadline extends java.io.Serializable
object Duration extends java.io.Serializable
object DurationConversions
object FiniteDuration extends java.io.Serializable
object fromNow
Этот объект может использоваться в качестве завершающего маркера для объявления дедлайна в какой-то будущей точке во времени:
import scala.concurrent.duration._ val deadline = 3 seconds fromNow
object span
Этот объект может использоваться в качестве завершающего маркера, если вы предпочитаете стиль без точек, но не хотите включать language.postfixOps:
import scala.concurrent.duration._ val duration = 2 seconds span
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala/concurrent/duration/index.html