美文网首页
Android 时间戳、UTC时间和本地时间的理解

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

作者: 因为我的心 | 来源:发表于2023-08-24 18:07 被阅读0次

    一、概念:

    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当前的时间

      /**
         * 获取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
        }
    

    输出结果:

    当前时间:2023-08-25 17:51:33
    utc时间:  2023-08-25 09:51:33
    

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

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

        /**
         *  将当前时间戳,转化为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
        }
    

    输出结果:

    当前时间:2023-08-25 17:45:17
    utc时间:  2023-08-25 09:45:17
    

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

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

    特别注意:无法把当前时间转化为UTC的时间戳,因为全世界的时间戳是一样的,可以把"2023-08-25 17:51:33"字符串转化为时间戳。

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

      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、将当前时间格式,转化为时间戳

      /**
         *  将当前时间格式,转化为时间戳
         */
        fun getStringTimeStamp(): Long {
            val dateString = "2023-08-25 12:50:10"
            val format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
            val date = format.parse(dateString)
            val timestamp = date.time
            return timestamp
        }
    

    结论:

    当前时间:2023-08-25 12:50:10
    当前时间戳:1692939010000
    

    相关文章

      网友评论

          本文标题:Android 时间戳、UTC时间和本地时间的理解

          本文链接:https://www.haomeiwen.com/subject/sjxvmdtx.html