Пакет scala.concurrent.duration
пакет duration
- Источник
- package.scala
Типовые члены
служебный класс Deadline extends Ordered[Deadline] with Product with Serializable
Этот класс хранит крайний срок, полученный с помощью Deadline.now или DSL продолжительности:
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
DSL, предоставляемый неявными преобразованиями, всегда позволяет создавать конечные продолжительности, даже для бесконечных входных значений 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
Семантика арифметических операций над Duration двойная:
-
точная операция сложения/вычитания с разрешением в наносекунды для конечных продолжительностей, независимо от величины слагаемыхизоморфна
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)нс, что примерно составляет 292 года.
явное окончательное класс IntMult extends AnyVal
явное окончательное класс LongMult extends AnyVal
тип TimeUnit = java.util.concurrent.TimeUnit
Члены-значения
final val DAYS: java.util.concurrent.TimeUnit(ДНИ)
final val HOURS: java.util.concurrent.TimeUnit(ЧАСЫ)
final val MICROSECONDS: java.util.concurrent.TimeUnit(МИКРОСЕКУНДЫ)
final val MILLISECONDS: java.util.concurrent.TimeUnit(МИЛЛИСЕКУНДЫ)
final val MINUTES: java.util.concurrent.TimeUnit(МИНУТЫ)
final val NANOSECONDS: java.util.concurrent.TimeUnit(НАНОСЕКУНДЫ)
final val SECONDS: java.util.concurrent.TimeUnit(СЕКУНДЫ)
implicit def durationToPair(d: Duration): (Long, TimeUnit)
implicit def pairIntToDuration(p: (Int, TimeUnit)): Duration
implicit def pairLongToDuration(p: (Long, TimeUnit)): FiniteDuration
object Deadline extends Serializable
object Duration extends Serializable
object DurationConversions
object FiniteDuration extends Serializable
object fromNow
Этот объект можно использовать в качестве завершающего маркера для объявления дедлайна в какой-то будущий момент времени:
import scala.concurrent.duration._ val deadline = 3 seconds fromNow
object span
Этот объект можно использовать в качестве завершающего маркера, если вы предпочитаете точечный стиль, но не хотите включать язык.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.12.9/scala/concurrent/duration/index.html