Android 获取当前时间戳 Kotlin:从新手到专家
\n\n您是否曾好奇,当您发送消息、拍照或启动计时器时,您的智能手机是如何知道准确时间的?这种魔法的核心是 时间戳——一种以毫秒精度记录时刻的数字标记。如果您正在使用 Kotlin 编写 Android 应用程序,迟早会遇到这样的任务:"Android 获取当前时间戳"。
\n\n这个问题是 Stack Overflow 上最热门的问题之一(成千上万的浏览量!)。这并不奇怪:看似简单,但实际上新手常常在毫秒、秒、时区和过时的类之间感到困惑。在本文中,我们将介绍在 Android 上使用 Kotlin 获取当前时间戳的所有方法——从基础到高级。您将了解如何为您的任务选择合适的方法,以及如何避免常见错误。
\n\n什么是时间戳,为什么在 Android 中需要它?
\n\n时间戳是一个数字,表示从特定起点开始经过的时间量。最常用的是 Unix 时间戳——自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒(或秒)数。为什么在 Android 中需要它?
\n\n- \n
- 事件日志记录——记录用户操作。 \n
- 数据同步——向服务器发送时间。 \n
- 缓存——检查数据是否过期。 \n
- 动画和计时器——计算经过的时间。 \n
- 数据库——按时间对记录进行排序。 \n
在 Kotlin 的 Android 开发中,您有几种工具可以获取时间戳。让我们从简单到复杂逐一介绍。
\n\n方法 1:System.currentTimeMillis() —— 经典方法
\n\n获取当前毫秒时间戳最简单、最快的方法是使用 System.currentTimeMillis()。此方法存在于 Java 中,并且在 Kotlin 中完全可用。
val currentTimestampMillis = System.currentTimeMillis()\nprintln("当前时间戳 (毫秒): $currentTimestampMillis")\n\n优点:
\n- \n
- 极快的速度(原生调用)。 \n
- 无需额外导入。 \n
- 在所有 Android 版本上均可运行。 \n
缺点:
\n- \n
- 仅返回毫秒数。 \n
- 依赖于设备的系统时间(用户可能会更改)。 \n
- 不考虑时区——它只是一个数字。 \n
此方法非常适合测量时间间隔(例如,代码执行时间)或当您需要一个用于比较的快速数字时。
\n\n方法 2:Instant.now() —— 现代方法(Java 8+)
\n\n从 API 级别 26(Android 8.0)及以上版本开始,您可以使用 java.time.Instant 类。这是现代时间 API 的一部分,解决了旧类的许多问题。
import java.time.Instant\n\nval instant = Instant.now()\nval timestampMillis = instant.toEpochMilli()\nval timestampSeconds = instant.epochSecond\n\nprintln("Instant: $instant")\nprintln("时间戳 (毫秒): $timestampMillis")\nprintln("时间戳 (秒): $timestampSeconds")\n\n优点:
\n- \n
- 简洁、现代的 API。 \n
- 易于转换为其他格式。 \n
- 默认使用 UTC。 \n
缺点:
\n- \n
- 需要 API 26+(对于旧设备,需要 desugaring 或 ThreeTenABP 库)。 \n
如果您的应用程序面向现代设备,Instant.now() 是获取时间戳的最佳选择。
\n\n方法 3:Calendar —— 已过时但仍在用
\n\njava.util.Calendar 类是一种旧方法,至今仍在使用。