Работа с датами в Котлине
1. Вступление
В этом кратком руководстве мы узнаем, как работать с датами в Kotlin.
Мы рассмотрим операции, связанные сDate-, такие как создание, форматирование и изменение дат.
2. Создание даты
Самый быстрый способ создать объектDate - использовать методLocalDate‘sparse():
var date = LocalDate.parse("2018-12-12")
Методparse() по умолчанию используетstandard date formatyyyy-MM-dd.
Мы также можем передать наш собственный формат для анализа строки даты:
var formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
var date = LocalDate.parse("31-12-2018", formatter)
И, если нам нужно больше контроля, мы можемexplicitly specify the year, day and month using LocalDate‘s of() method:
var date = LocalDate.of(2018, 12, 31)
3. Форматирование даты
Затем давайте посмотрим, как мы можем отформатировать наши объекты даты обратно вStrings.
Стандартный способ форматирования даты с использованием формата по умолчанию вKotlin - это вызовtoString() method.
Давай назначим дату
var date = LocalDate.parse("2018-12-31")
и посмотрите на вывод по умолчанию с использованиемtoString:
assertThat(date.toString()).isEqualTo("2018-12-31")
Это выглядит удобочитаемым, поскольку выходной формат -yyyy-MM-dd, но, опять же, нам может потребоваться отформатировать дату в пользовательских форматах в зависимости от наших сценариев использования.
To format our date to different formats we can use LocalDate‘s format() method и передать ему наш собственный формат, используяDateTimeFormatter:
var formatter = DateTimeFormatter.ofPattern("dd-MMMM-yyyy")
var formattedDate = date.format(formatter)
Это выводит красиво отформатированную дату:
assertThat(formattedDate).isEqualTo("31-December-2018")
4. Извлечение компонентов даты
LocalDate предоставляет множество методов, которые мы можем использовать для извлечения определенных компонентов изDate.
Некоторые из них довольно тривиальны, например, извлечение года, месяца или дня изDate:
var date = LocalDate.parse("2018-12-31")
assertThat(date.year).isEqualTo(2018)
assertThat(date.month).isEqualTo(Month.DECEMBER)
assertThat(date.dayOfMonth).isEqualTo(31)
Мы также можем извлечь другую информацию, такую как era, dayOfTheWeek или dayOfTheMonth:
assertThat(date.era.toString()).isEqualTo("CE")
assertThat(date.dayOfWeek).isEqualTo(DayOfWeek.MONDAY)
assertThat(date.dayOfYear).isEqualTo(365)
5. Работа сPeriod
Наконец, давайте рассмотрим работу сPeriods в Kotlin.
Точки представляют собой расстояние на временной шкале. Мы можем создатьPeriod, используя метод фабрики классовPeriod:
var period = Period.of(1, 2, 3)
Это создаетPeriod из 1 года, 2 месяцев и 3 дней.
Чтобы добавить этотPeriod к существующей дате, мы используем методLocalDate ’splus() :
var date = LocalDate.of(2018, 6, 25)
var modifiedDate = date.plus(period)
Это добавит 1 год, 2 месяца и 3 дня к данной дате и даст модифицированную дату:
assertThat(modifiedDate).isEqualTo("2019-08-28")
Точно так же мы можем вычестьPeriod из заданной даты:
var date = LocalDate.of(2018, 6, 25)
var modifiedDate = date.minus(period)
И, как ожидается, измененная дата будет:
assertThat(modifiedDate).isEqualTo("2017-04-22")
Также мы можем использовать Периоды для представления расстояния между двумя датами.
Предположим, у нас есть две даты с интервалом ровно в 6 месяцев друг от друга:
var date1 = LocalDate.parse("2018-06-25")
var date2 = LocalDate.parse("2018-12-25")
Теперь мы можем представить расстояние между этими двумя датами, используя метод Periodbetween :
var period = Period.between(date1, date2)
Переменнаяperiod даст следующий:
assertThat(period.toString()).isEqualTo("P6M")
P означаетPeriod, а6M означает 6 месяцев.
6. Заключение
В этой статье мы познакомились с основами работы с датами в Котлине.
Мы рассмотрели, как создавать экземпляры даты, используя различные методы, и как форматировать объекты даты обратно в читаемый текст.
Кроме того, мы рассмотрели извлечение компонентов из объектовDate и, наконец, как работать сPeriods в Kotlin.
Код, используемый в этом руководстве, доступенover on Github.