Функция from

Функция from класса Period создает объект Period из временной единицы, реализующей интерфейс TemporalAmount. В параметр мы передаем объект, содержащий информацию о периоде времени, который необходимо преобразовать в Period.

Импорт

kotlinimport java.time.Period
import java.time.temporal.TemporalAmount

Синтаксис

kotlinfun from(amount: TemporalAmount): Period

Пример

Создадим объект Period из другого объекта Period:

kotlinval originalPeriod = Period.of(2, 5, 15)
val newPeriod = Period.from(originalPeriod)
println(newPeriod)

Результат выполнения кода:

kotlinString "P2Y5M15D"

Пример

Попытка создания Period из неподдерживаемого типа временной единицы:

kotlinimport java.time.Duration

try {
  val duration = Duration.ofHours(48)
  val period = Period.from(duration)
  println(period)
} catch (e: Exception) {
  println("Error: " + e.message)
}

Результат выполнения кода:

kotlinString "Error: Unable to convert to Period"

Пример

Использование Period.from с кастомной реализацией TemporalAmount:

kotlinimport java.time.temporal.TemporalAmount
import java.time.temporal.TemporalUnit
import java.time.temporal.ChronoUnit
import java.util.List

val customAmount = object : TemporalAmount {
  override fun get(unit: TemporalUnit): Long {
    return when (unit) {
      ChronoUnit.YEARS -> 1
      ChronoUnit.MONTHS -> 6
      ChronoUnit.DAYS -> 10
      else -> 0
    }
  }
  
  override fun getUnits(): List<TemporalUnit> {
    return listOf(ChronoUnit.YEARS, ChronoUnit.MONTHS, ChronoUnit.DAYS)
  }
  
  override fun addTo(temporal: java.time.temporal.Temporal): java.time.temporal.Temporal {
    return temporal.plus(1, ChronoUnit.YEARS)
      .plus(6, ChronoUnit.MONTHS)
      .plus(10, ChronoUnit.DAYS)
  }
  
  override fun subtractFrom(temporal: java.time.temporal.Temporal): java.time.temporal.Temporal {
    return temporal.minus(1, ChronoUnit.YEARS)
      .minus(6, ChronoUnit.MONTHS)
      .minus(10, ChronoUnit.DAYS)
  }
}

val period = Period.from(customAmount)
println(period)

Результат выполнения кода:

kotlinString "P1Y6M10D"

Смотрите также

  • функцию of класса Period,
    которая создает период из отдельных компонентов
  • функцию parse класса Period,
    которая преобразует строку в период
  • функцию between класса Period,
    которая вычисляет период между двумя датами
  • интерфейс TemporalAmount,
    который представляет временной промежуток