在Kotlin中如何获取设备的当前时间?
Kotlin 从设备端获取当前时间实现方案
以下方案覆盖通用JVM环境、Android全版本场景,可按需选择:
通用方案(JVM 1.8+ / Android API 26+ / 已开启核心库脱糖)
官方推荐优先使用java.time包相关API,线程安全且功能完善:
- 获取毫秒级时间戳(1970-01-01 UTC 至今的毫秒数,跟随设备系统时间设置)
val currentTimestamp = System.currentTimeMillis()
- 获取结构化时间对象,可直接读取年、月、日、时、分、秒等字段
import java.time.LocalDateTime import java.time.ZonedDateTime import java.time.ZoneId // 设备当前时区的本地时间,无时区信息 val localTime = LocalDateTime.now() // 带时区的完整时间对象,默认使用设备系统时区,也可手动指定时区 val zonedTime = ZonedDateTime.now(ZoneId.systemDefault()) // 字段读取示例 val currentYear = localTime.year val currentMonth = localTime.monthValue val currentHour = localTime.hour
- 格式化为自定义样式的字符串
import java.time.format.DateTimeFormatter val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") val formattedTime = LocalDateTime.now().format(formatter) // 输出示例:2024-05-20 15:42:30
Android 低版本兼容方案(API < 26 未开启脱糖)
可使用java.util包下的传统API,注意SimpleDateFormat非线程安全,不要设为全局静态变量:
- 结构化时间读取
import java.util.Calendar val calendar = Calendar.getInstance() val year = calendar.get(Calendar.YEAR) val month = calendar.get(Calendar.MONTH) + 1 // 系统返回月份从0开始,需+1 val day = calendar.get(Calendar.DAY_OF_MONTH) val hour = calendar.get(Calendar.HOUR_OF_DAY) val minute = calendar.get(Calendar.MINUTE)
- 字符串格式化
import java.text.SimpleDateFormat import java.util.Locale val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) val formattedTime = sdf.format(System.currentTimeMillis())
注意事项
以上所有方法获取的时间都跟随设备系统设置,若用户手动修改系统时间会导致取值不准。如果需要不受系统设置影响的相对时间,Android 环境可使用SystemClock.elapsedRealtime()获取系统开机至今的毫秒数,结合首次拉取的服务端标准时间计算校准。
内容的提问来源于stack exchange,提问作者Partha
相关产品推荐
相关产品推荐

