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

相关推荐
Eastsea.Chen24 分钟前
MTK Android12 user版本MtkLogger
android·framework
长亭外的少年8 小时前
Kotlin 编译失败问题及解决方案:从守护进程到 Gradle 配置
android·开发语言·kotlin
建群新人小猿10 小时前
会员等级经验问题
android·开发语言·前端·javascript·php
1024小神11 小时前
tauri2.0版本开发苹果ios和安卓android应用,环境搭建和最后编译为apk
android·ios·tauri
兰琛11 小时前
20241121 android中树结构列表(使用recyclerView实现)
android·gitee
Y多了个想法12 小时前
RK3568 android11 适配敦泰触摸屏 FocalTech-ft5526
android·rk3568·触摸屏·tp·敦泰·focaltech·ft5526
NotesChapter13 小时前
Android吸顶效果,并有着ViewPager左右切换
android
_祝你今天愉快14 小时前
分析android :The binary version of its metadata is 1.8.0, expected version is 1.5.
android
暮志未晚Webgl15 小时前
109. UE5 GAS RPG 实现检查点的存档功能
android·java·ue5
麦田里的守望者江15 小时前
KMP 中的 expect 和 actual 声明
android·ios·kotlin