Android 时间戳、UTC时间和本地时间的理解

一、概念:

1、概念

时间戳是指某个特定时间点的标识,通常是一个数字或字符串。它表示从某个固定的起始时间(通常是1970年1月1日00:00:00 UTC)到该时间点所经过的秒数或毫秒数。时间戳可以用于记录事件发生的时间、计算时间间隔、进行时间排序等操作。

在计算机领域,时间戳通常以整数或浮点数的形式表示,例如Unix时间戳是一个整数,表示从起始时间到当前时间的秒数。而JavaScript中的时间戳是一个浮点数,表示从起始时间到当前时间的毫秒数。

注意:时间戳的优点是具有唯一性和可比较性,不受时区和地域的影响(也就是说,在全世界任何时区,获取的时间戳都是一样的)。

它可以方便地进行时间计算和比较,同时也可以减少存储空间和传输数据的大小。因此,在很多应用中,时间戳被广泛用于记录和处理时间相关的信息。

2、时间戳的起点

时间戳的起点通常是1970年1月1日0时0分0秒,也被称为UNIX纪元(UNIX Epoch),这个时间点被认为是计算机系统中最早的可表示时间点。因此,时间戳通常是从这个时间点开始计算的。

3、时间戳的单位

时间戳通常以秒为单位计算,但也可以使用毫秒、微秒等更小的时间单位。在某些场景下,需要精确到纳秒级别的时间戳,比如高频交易系统、科学实验等。

4、时间戳的表示方式

时间戳可以用不同的方式表示,比如整数、浮点数、字符串等。在不同的编程语言和操作系统中,时间戳的表示方式也可能不同。例如,在Unix/Linux系统中,时间戳通常是一个整数,表示从UNIX纪元开始的秒数;而在Windows系统中,时间戳通常是一个64位整数,表示从1601年1月1日0时0分0秒开始的100纳秒数。

5、时间戳的转换

我们可以使用各种编程语言和工具将时间戳转换为人类可读的时间格式,比如年月日时分秒,或者其他自定义的时间格式。同样,我们也可以将人类可读的时间格式转换为时间戳,以便于计算机处理。

二、代码实现:

1、获取UTC当前的时间

java 复制代码
  /**
     * 获取UTC当前的时间
     */
    fun getUTCTimeStamp(): String {
        val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
        // 设置时区为UTC
        sdf.timeZone = TimeZone.getTimeZone("UTC")
        // 格式化日期时间为字符串
        var time = sdf.format(Date())
        return time
    }

输出结果:

java 复制代码
当前时间:2024-01-26 22:06:23
utc时间:  2024-01-26 14:06:23

结论:发现UTC时间比中国时间少了8个小时。

2、将当前时间戳,转化为UTC的时间格式化显示

java 复制代码
    /**
     *  将当前时间戳,转化为UTC的时间格式化显示
     */
    @RequiresApi(Build.VERSION_CODES.O)
    fun getUTCTimeStamp2(): String {
        //当前的时间戳(也可以服务器时间戳)
        val time= currentTimeMillis()/1000
        val instant = Instant.ofEpochSecond(time)
       // UTC转化
        val utcDateTime = instant.atOffset(ZoneOffset.UTC)
        val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
        val utcDateTimeString = formatter.format(utcDateTime)
        return utcDateTimeString
    }

输出结果:

makefile 复制代码
当前时间:2024-01-26 22:06:23
utc时间:  2024-01-26 14:06:23

结论:发现UTC时间比中国时间少了8个小时。

3、把当前时间转化为UTC的时间戳(不必要这样写)

特别注意:无法把当前时间转化为UTC的时间戳,因为全世界的时间戳是一样的,可以把"2024-01-26 22:06:23"字符串转化为时间戳。

注意:获取当前时间戳currentTimeMillis() 就可以了。

kotlin 复制代码
  fun getUTCTimeStamp3(): Long {
        val utcTimestamp = currentTimeMillis()
        val timeZone = TimeZone.getTimeZone("UTC")
        val calendar = Calendar.getInstance()
        calendar.timeZone = timeZone
        //方式1
        // calendar.time = Date()
        //方式2
         calendar.timeInMillis = utcTimestamp
        val utcTimestamp2 = calendar.timeInMillis
        return utcTimestamp2
    }

4、将当前时间格式,转化为时间戳

kotlin 复制代码
  /**
     *  将当前时间格式,转化为时间戳
     */
    fun getStringTimeStamp(): Long {
        val dateString = "2024-01-26 22:06:23"
        val format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
        val date = format.parse(dateString)
        val timestamp = date.time
        return timestamp
    }

结论:

makefile 复制代码
当前时间:2024-01-26 22:06:23
当前时间戳:1706277983

👀关注公众号:Android老皮!!!欢迎大家来找我探讨交流👀

相关推荐
后端码匠2 小时前
MySQL 8.0安装(压缩包方式)
android·mysql·adb
梓仁沐白3 小时前
Android清单文件
android
董可伦6 小时前
Dinky 安装部署并配置提交 Flink Yarn 任务
android·adb·flink
每次的天空6 小时前
Android学习总结之Glide自定义三级缓存(面试篇)
android·学习·glide
恋猫de小郭7 小时前
如何查看项目是否支持最新 Android 16K Page Size 一文汇总
android·开发语言·javascript·kotlin
flying robot8 小时前
小结:Android系统架构
android·系统架构
xiaogai_gai8 小时前
有效的聚水潭数据集成到MySQL案例
android·数据库·mysql
鹅鹅鹅呢9 小时前
mysql 登录报错:ERROR 1045(28000):Access denied for user ‘root‘@‘localhost‘ (using password Yes)
android·数据库·mysql
在人间负债^9 小时前
假装自己是个小白 ---- 重新认识MySQL
android·数据库·mysql
Unity官方开发者社区9 小时前
Android App View——团结引擎车机版实现安卓应用原生嵌入 3D 开发场景
android·3d·团结引擎1.5·团结引擎车机版