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

相关推荐
Reese_Cool1 小时前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言
平凡シンプル2 小时前
安卓 uniapp跨端开发
android·uni-app
elina80132 小时前
安卓实现导入Excel文件
android·excel
严文文-Chris2 小时前
【设计模式-享元】
android·java·设计模式
趋势大仙2 小时前
SQLiteDatabase insert or replace数据不生效
android·数据库
DS小龙哥2 小时前
QT For Android开发-打开PPT文件
android·qt·powerpoint
试行3 小时前
Android实现自定义下拉列表绑定数据
android·java
Dingdangr8 小时前
Android中的Intent的作用
android
技术无疆8 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
GEEKVIP8 小时前
Android 恢复挑战和解决方案:如何从 Android 设备恢复删除的文件
android·笔记·安全·macos·智能手机·电脑·笔记本电脑