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老皮!!!欢迎大家来找我探讨交流👀

相关推荐
mmsx15 分钟前
android 登录界面编写
android·登录界面
姜毛毛-JYM15 分钟前
【JetPack】Navigation知识点总结
android
花生糖@1 小时前
Android XR 应用程序开发 | 从 Unity 6 开发准备到应用程序构建的步骤
android·unity·xr·android xr
是程序喵呀1 小时前
MySQL备份
android·mysql·adb
casual_clover1 小时前
Android 之 List 简述
android·list
锋风Fengfeng3 小时前
安卓15预置第三方apk时签名报错问题解决
android
User_undefined3 小时前
uniapp Native.js原生arr插件服务发送广播到uniapp页面中
android·javascript·uni-app
程序员厉飞雨4 小时前
Android R8 耗时优化
android·java·前端
丘狸尾6 小时前
[cisco 模拟器] ftp服务器配置
android·运维·服务器
van叶~8 小时前
探索未来编程:仓颉语言的优雅设计与无限可能
android·java·数据库·仓颉