
В Kotlin нет отдельного встроенного метода для извлечения текущего года, но язык предоставляет доступ к библиотекам Java, включая java.time, которые позволяют решать задачу максимально точно и современно.
Наиболее удобным способом является использование класса LocalDate. Вызов LocalDate.now().year возвращает значение года в формате Int. Такой подход работает корректно в большинстве приложений и учитывает локальные настройки времени.
Если требуется работа с часовыми поясами, можно использовать ZonedDateTime и явно указывать ZoneId. Это особенно важно в распределённых системах и при работе с серверными приложениями, где критична синхронизация даты и времени.
В устаревшем API Java можно встретить класс Calendar. Его метод get(Calendar.YEAR) также возвращает текущий год, но применять его рекомендуется только при необходимости поддержки старого кода, так как java.time более безопасен и предсказуем.
Использование класса LocalDate для получения года

Класс LocalDate из пакета java.time позволяет получить текущую дату без учета времени и часового пояса. Для извлечения года применяется метод getYear().
Пример:
import java.time.LocalDate
fun main() {
val year = LocalDate.now().year
println(year)
}
Вызов LocalDate.now() возвращает объект, содержащий текущую дату системы. Доступ к полю year обеспечивает извлечение года в формате Int, что удобно для последующего использования в вычислениях, логике проверок или форматировании.
Получение текущего года через LocalDateTime

В Kotlin для работы с датами удобно использовать класс LocalDateTime из пакета java.time. Чтобы получить текущий год, нужно обратиться к методу now(), а затем извлечь значение свойства year.
Пример кода:
import java.time.LocalDateTime
fun main() {
val currentYear = LocalDateTime.now().year
println(currentYear)
}
Такой подход полезен, когда требуется не только год, но и доступ к другим компонентам даты и времени – месяцу, дню, часу, минутам. Если важна только дата без времени, предпочтительнее использовать LocalDate, а при необходимости учитывать временную зону – ZonedDateTime.
Извлечение года из объекта ZonedDateTime

Класс ZonedDateTime используется для работы с датой и временем с учетом временной зоны. Получить год можно напрямую через метод getYear().
import java.time.ZonedDateTime
fun main() {
val dateTime = ZonedDateTime.now()
val year = dateTime.year
println(year)
}
Метод year возвращает целое число типа Int, соответствующее текущему году в указанной временной зоне.
- Если требуется использовать конкретную зону, задайте её через
ZonedDateTime.now(ZoneId.of("Europe/Moscow")). - Полученное значение можно применять для вычислений, сравнения дат или формирования строк.
- Метод работает без дополнительных преобразований и не зависит от формата даты.
Работа с классом Calendar для получения года

Класс Calendar предоставляет доступ к различным компонентам даты и времени. Чтобы получить текущий год, достаточно создать экземпляр через метод getInstance() и вызвать get(Calendar.YEAR).
Пример:
import java.util.Calendar
fun main() {
val calendar = Calendar.getInstance()
val year = calendar.get(Calendar.YEAR)
println(year)
}
Метод get(Calendar.YEAR) возвращает значение типа Int, отражающее год в соответствии с текущим системным временем. При необходимости можно задать временную зону с помощью calendar.timeZone = TimeZone.getTimeZone("UTC"), чтобы результат не зависел от локальных настроек устройства.
Использование Calendar оправдано, когда требуется работать не только с годом, но и с другими компонентами даты: месяцами, днями или часами.
Преобразование текущей даты в строку с годом

Для получения строки с годом в Kotlin удобно использовать класс LocalDate и форматирование через DateTimeFormatter. Такой подход обеспечивает корректное извлечение года независимо от локали и настроек системы.
Пример кода:
import java.time.LocalDate
import java.time.format.DateTimeFormatter
fun main() {
val currentDate = LocalDate.now()
val formatter = DateTimeFormatter.ofPattern("yyyy")
val yearString = currentDate.format(formatter)
println(yearString)
}
"yyyy" |
2025 |
"yy" |
25 |
"YYYY" |
2025 (год ISO, может отличаться в конце декабря) |
При выборе формата следует учитывать разницу между yyyy и YYYY, чтобы избежать ошибок при работе с неделями ISO.
Получение года с учётом временной зоны

Для работы с датой и временем в Kotlin с учётом временной зоны используется пакет java.time. Основной подход – создать объект ZonedDateTime, который объединяет локальное время и выбранную временную зону.
Пример получения текущего года в зоне «Europe/Moscow»:
import java.time.ZonedDateTime
import java.time.ZoneId
val currentYear = ZonedDateTime.now(ZoneId.of("Europe/Moscow")).year
Метод ZoneId.of() принимает идентификатор временной зоны в формате IANA. Список поддерживаемых зон доступен через ZoneId.getAvailableZoneIds(). Использование точного идентификатора гарантирует правильное вычисление года при переходе на летнее/зимнее время.
Для универсальности можно использовать системную временную зону: ZoneId.systemDefault(). В этом случае ZonedDateTime.now(ZoneId.systemDefault()).year вернёт год в локальном времени устройства, что важно для приложений с глобальными пользователями.
Если требуется работать с датой без учёта времени суток, лучше использовать LocalDate.now(ZoneId.of("Asia/Tokyo")).year. Это исключает смещение из-за часов и минут, оставляя только календарный год.
Сравнение разных способов получения текущего года

В Kotlin существуют три основных подхода для получения текущего года: через класс java.util.Calendar, через java.time.LocalDate и через java.time.Year. Использование Calendar требует создания объекта и вызова get(Calendar.YEAR), что занимает несколько миллисекунд и даёт доступ ко всем полям даты, но синтаксис громоздкий и менее наглядный.
LocalDate.now().year возвращает текущий год напрямую в виде Int, не требует дополнительных вычислений и совместим с современным API java.time. Этот способ предпочтителен для большинства приложений благодаря простоте и читаемости.
Year.now().value даёт тот же результат, что и LocalDate.now().year, но предназначен для работы с объектами года. Он удобен при манипуляциях исключительно с годом, например, для расчёта возрастов или проверки годовых условий, но не предоставляет информацию о месяце или дне.
По производительности LocalDate.now().year и Year.now().value примерно равны и быстрее, чем Calendar, особенно в циклах или при массовых вычислениях. Если нужен доступ к дате в целом, лучше использовать LocalDate; если важен только год, Year делает код чище. Calendar оправдан только при работе с устаревшими API или при необходимости поддержки старых версий Java.
Вопрос-ответ:
Как получить текущий год в Kotlin без использования устаревших классов Java?
В Kotlin можно использовать класс `LocalDate` из пакета `java.time`. Для получения текущего года достаточно вызвать `LocalDate.now().year`. Этот способ полностью соответствует современным стандартам работы с датой и временем и не зависит от старых классов вроде `Date` или `Calendar`.
Можно ли получить текущий год в Kotlin через объект Calendar и насколько это безопасно?
Да, можно создать объект `Calendar` с помощью `Calendar.getInstance()` и вызвать `get(Calendar.YEAR)`. Однако этот подход считается устаревшим, потому что API `Calendar` сложнее в использовании и менее наглядное по сравнению с `java.time.LocalDate`. Для простых задач лучше использовать `LocalDate.now().year`.
Есть ли способ получить текущий год в Kotlin без подключения дополнительных библиотек?
Да, Kotlin использует стандартные библиотеки Java, поэтому можно обойтись без сторонних зависимостей. Достаточно импортировать `java.time.LocalDate` и вызвать `LocalDate.now().year`. Все необходимые функции уже включены в JDK, поэтому никаких дополнительных модулей не требуется.
Как получить текущий год в Kotlin в многопоточном приложении, чтобы избежать проблем с синхронизацией?
Методы класса `LocalDate` полностью безопасны для многопоточности, так как объекты даты неизменяемы. Для получения года достаточно написать `val year = LocalDate.now().year`. Это работает одинаково независимо от количества потоков, и дополнительной синхронизации не требуется.
Как в Kotlin получить текущий год без использования устаревших классов?
В Kotlin можно воспользоваться классами из пакета java.time. Например, для получения текущего года можно использовать LocalDate и Year. Код будет выглядеть так: val currentYear = java.time.LocalDate.now().year. Этот способ использует современный API для работы с датой и временем и не зависит от устаревших классов вроде Calendar или Date.
