Kotlin: Как получить часовой пояс устройства

В Kotlin можно получить часовой пояс пользователя несколькими способами.

Через TimeZone


val timeZone = TimeZone.getDefault()
val timeZoneId = timeZone.id // например: "Europe/Moscow"
val offset = timeZone.rawOffset / (1000 * 60 * 60) // смещение в часах

Через ZoneId (Рекомендуемый способ)


import java.time.ZoneId

val zoneId = ZoneId.systemDefault()
val zoneIdString = zoneId.toString() // например: "Europe/Moscow"

Через Calendar


import java.util.Calendar

val calendar = Calendar.getInstance()
val timeZone = calendar.timeZone
val offset = timeZone.getRawOffset()

Через LocalDateTime


import java.time.LocalDateTime
import java.time.ZoneId

val currentTime = LocalDateTime.now(ZoneId.systemDefault())

Примеры использования



Получение названия часового пояса
fun getUserTimeZone(): String {
    return ZoneId.systemDefault().toString()
}

Получение смещения от UTC
fun getTimeZoneOffset(): Int {
    val zone = TimeZone.getDefault()
    return zone.getRawOffset() / (1000 * 60 * 60)
}

Важные моменты


  • Часовой пояс определяется автоматически на основе настроек устройства.
  • Методы возвращают:
    • Идентификатор часового пояса (например: “Europe/Moscow”).
    • Смещение от UTC в часах.
    • Информацию о переходе на летнее время.


Пример полного использования


fun main() {
    val zoneId = ZoneId.systemDefault()
    println("Часовой пояс: $zoneId")
    
    val timeZone = TimeZone.getDefault()
    println("ID часового пояса: ${timeZone.id}")
    println("Смещение от UTC: ${timeZone.getRawOffset() / (1000 * 60 * 60)} часов")
    
    val currentTime = LocalDateTime.now(zoneId)
    println("Текущее время: $currentTime")
}

Этот код выведет информацию о текущем часовом поясе устройства, его смещении от UTC и текущем времени.

Автор:  06.03.2026 09:06:33 am