Как получить текущую локальную дату и время в Kotlin?
Использование java.time.LocalDateTime (рекомендуемый способ)
Начиная с Android API 26 (Android 8.0), в состав платформы входит пакет java.time, который является современной и правильной заменой устаревшим java.util.Date и java.text.SimpleDateFormat. Если ваш minSdkVersion равен 26 или выше, используйте именно этот подход.
Вот как получить текущую локальную дату и время и отформатировать их в нужный вам вид:
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.util.Locale
fun getCurrentDateTime(): String {
val current = LocalDateTime.now()
val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm", Locale("ru"))
return current.format(formatter)
}
// Пример использования
fun main() {
println(getCurrentDateTime()) // Выведет, например: 12.05.2024 15:30
}
Что здесь происходит?
LocalDateTime.now()— статический метод, который возвращает текущие дату и время из системных часов в часовом поясе по умолчанию.DateTimeFormatter.ofPattern()— создает форматтер с вашим шаблоном.Locale("ru")гарантирует, что месяцы и дни недели будут на русском, если вы их используете.current.format(formatter)— преобразует объектLocalDateTimeв строку.
Что делать, если minSdkVersion меньше 26?
Если вы поддерживаете устройства с Android 7.1 (API 25) и ниже, используйте библиотеку ThreeTenABP. Она является бэкпортом java.time для старых версий Android.
// 1. Добавьте зависимость в build.gradle (Module: app)
// implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0'
// 2. Инициализируйте в Application или Activity
// AndroidThreeTen.init(this)
// 3. Используйте точно такой же код, как выше, но импорты будут из пакета org.threeten.bp
import org.threeten.bp.LocalDateTime
import org.threeten.bp.format.DateTimeFormatter
fun getCurrentDateTime(): String {
val current = LocalDateTime.now()
val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm", Locale("ru"))
return current.format(formatter)
}
Почему это лучше, чем java.util.Date?
- Неизменяемость (Immutable):
LocalDateTimeнельзя изменить после создания, что предотвращает множество ошибок в многопоточных средах. - Чистота API: Методы
now(),plusDays(),minusHours()интуитивно понятны. - Потокобезопасность:
DateTimeFormatterпотокобезопасен, в отличие отSimpleDateFormat. - Разделение даты и времени: Вы можете использовать
LocalDate(только дата),LocalTime(только время) иZonedDateTime(с часовым поясом).
В итоге, для нового проекта всегда выбирайте java.time (или ThreeTenABP для обратной совместимости). Это стандарт де-факто в современной Kotlin/Java-разработке.
Альтернатива с использованием Kotlinx-datetime (мультиплатформенный подход)
Если вы пишете мультиплатформенное приложение (KMP) или просто хотите более "котлиновское" решение, обратите внимание на библиотеку kotlinx-datetime от JetBrains. Она не зависит от платформы и работает на JVM, JS и Native.
// 1. Добавьте зависимость в build.gradle.kts
// implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.0")
import kotlinx.datetime.Clock
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toLocalDateTime
import kotlinx.datetime.format.DateTimeFormatter
import kotlinx.datetime.format.Format
fun getCurrentDateTime(): String {
val now = Clock.System.now()
val localDateTime = now.toLocalDateTime(TimeZone.currentSystemDefault())
val formatter = DateTimeFormatter(Format {
dayOfMonth()
char('.')
monthNumber()
char('.')
year()
char(' ')
hour()
char(':')
minute()
})
return localDateTime.format(formatter)
}
Этот подход особенно полезен, если вы планируете делиться кодом между Android и iOS. Clock.System.now() дает вам текущий момент времени, а toLocalDateTime() преобразует его в локальные дату и время с учетом часового пояса устройства. Форматирование здесь строится через DSL, что делает код очень читаемым.
Однако учтите: для Android-проектов, которые не являются мультиплатформенными, использование java.time (из первого ответа) является более легковесным и стандартным решением, так как не требует дополнительной библиотеки.
Ответов пока нет.
Войдите чтобы оставить ответ