[ Term ] 你真的了解 UTC 时间吗?它和 GMT 时间的区别是什么?


什么是 GMT 和 UTC,他们之间的区别是什么?


        GMT(Greenwich Mean Time)和UTC(Coordinated Universal Time)是两个不同的时间标准,但它们非常相似并且通常被混淆使用,那他们之间的区别在哪呢 ?

        GMT指的是格林威治标准时间(Greenwich Mean Time),是以英国伦敦的格林威治区为基准的世界时间标准。它是一个世界范围内通用的标准时间,不受夏令时或其他因素的影响。GMT通常用于航海、航空、科学、天文等领域,也被广泛用于全球性的网络和软件系统中作为标准时间。它通常使用24小时制,以时、分和秒的形式表示时间 (GMT最初是由英国皇家海军用作全球通信和导航的基准时间标准,它以英国伦敦的本初子午线上的太阳穿越点为参考点。因此,GMT也被称为伦敦时间)。

        UTC 全称为 “Coordinated Universal Time” 中文翻译为 —— 协调世界时,或称为 世界统一时间、世界标准时间、国际协调时间 —— 它由国际原子时(TAI)和旋转地球服务(UT1)的平均值计算得出的。是国际电信联盟(ITU)制定和维护的标准时间。UTC基于原子钟而不是地球自转来确定时间,因此 它比GMT更准确 !

        在实际使用中,GMT和UTC之间的差别通常很小,并且在大多数情况下可以互换使用。但是 —— 由于 UTC 比 GMT 更精准,在项目中绝大多数都是使用 UTC 时间 。

需要补充的是当他们转换为时间戳的时候 —— 全球相同时刻,不管什么时区,时间戳都是全球一致的,时间戳是不会跟着时区的改变而改变。用时间戳来表示时间全球都是一致的,但是它是很长的整数,非常不直观,因此大家常用格式化字符串来表示时间(也就是不同的时区的时间以零时区为准需要加减 (向东是加向西是减) 不同个小时 —— 比如零时区是2024-01-17 00:00:00,东八区就是 +8个小时 变成了2024-01-17 08:00:00,同理西八区就是 -8个小时 变成了2024-01-16 16:00:00)。

题外话:       GMT的分别是Greenwich Mean Time三个单词的首字母缩写,那为什么 Coordinated Universal Time 的缩写叫 UTC 呢?不应该是 CUT 吗?

哈哈,原来 UTC 的缩写源于法语 —— “Temps Universel Coordonné”,因为法文中“temps”和“universel”之间有一个 “e” 音,所以选择了“UTC”作为缩写。此外,“Universal Time”(通用世界时)这个词汇已经有一个相对应的缩写 UT,所以在缩写 UTC 中采用了字母 “C”,表示为“coordinated”。

假设我们有一个UTC时间,我该怎么使用呢?


         地球上的各个国家都被划分在了不同的时区里,我们可以把UTC时间理解成一个基准,时区相当于一个偏移量,所有国家的时间都可以根据这个基准时间从左或从又偏移(分别对应加上或减去对应的时区数)

简言之 ——  通过 UTC 时间加上任何国家的时区得出就是那个国家的时间  

        —— 比如现在的 UTC 时间是2023年5月10日10:00:00,那么北京时间就是UTC+8,也就是2023年5月10日18:00:00。同样,纽约的时区是UTC-4,所以在纽约现在的时间是UTC时间减去4个小时,也就是2023年5月10日06:00:00这里用 Java 举一个最简单UTC时间转换例子

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

/**
 * Author: 削尖的螺丝刀
 */
public class UTCTimeExample {
    public static void main(String[] args) {

       // UTC时间字符串
        String utcTime = "2023-05-10T14:30:00Z";

        // 将UTC时间字符串解析为Instant对象
        Instant instant = Instant.parse(utcTime);

        // 将Instant对象转换为本地时间
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

        // 格式化为另一个字符串
        String formattedTime = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

        // UTC基准时间: 2023-05-10T14:30:00Z
        System.out.println("UTC时间字符串:" + utcTime);
        // 输出结果(本地时间为东八区,所以偏移量加8得出):  2023-05-10 22:30:00
        System.out.println("本地时间字符串:" + formattedTime);

    }
}

        可能有小伙伴又会好奇问了 —— "2023-05-10T14:30:00Z" , 为什么要用这样的字符串才行?它代表什么意思呢?

        —— 其实这是 ISO 8601 国际标准化组织(ISO)定义的标准时间格式,它规定了如何用数字表示日期、时间和时间间隔,以及如何表示日期和时间的组合。其主要目的是确保日期和时间格式的一致性,以方便跨越国际边界的信息交流和处理。

        ISO 8601格式可以表示年、月、日、小时、分钟、秒、时区和时间间隔。日期和时间之间使用字母“T”分隔。例如,2023年5月10日下午3点30分45秒的ISO 8601表示为“2023-05-10T15:30:45”。如果需要表示时区,可以在时间后面加上一个偏移量,如“+08:00”表示东八区 —— “2023-05-10T15:30:45+08:00”,加上时区之后这里就是东八区时间了,而 UTC 时间怎么表示呢? 想必你也猜到了,就是后面+0时 —— `2023-05-10T14:30:00+00:00` 当然 也可以用 `2023-05-10T14:30:00Z` (也就是上面代码中的例子)表示

这里给出国际化服务场景下,处理不同时区问题时的一些建议:

  1. 使用标准的时间格式:使用标准的时间格式,如ISO 8601,可以确保所有人都能够理解和解析时间戳。ISO 8601格式的时间戳类似于这样:YYYY-MM-DDTHH:MM:SSZ,其中T表示时间分隔符,Z表示UTC时间。

  2. 存储和传输时间戳时,使用UTC时间:使用UTC时间作为标准时间可以避免因为不同时区而出现的时间差问题。

  3. 在用户界面上,将UTC时间转换为用户所在时区的本地时间:将UTC时间转换为本地时间可以提高用户体验,让用户更加容易理解时间戳。可以使用编程语言提供的日期时间库或第三方库来进行转换。

  4. 了解不同时区的时差:在处理不同时区的时间问题时,需要了解不同时区之间的时差,以便在计算时间差和转换时间戳时进行正确的计算。

  5. 建立良好的沟通和协作机制:在一个国际化的微服务体系中,需要建立良好的沟通和协作机制,以确保在处理时间问题时能够顺畅地进行交流和协作。

        比如在一个国际化的电商平台中,可以将所有时间戳都存储为UTC时间,同时将用户界面上的时间戳转换为用户所在时区的本地时间。此外,也可根据实际场景和需求,在系统中记录用户所在的时区信息,并在系统中使用正确的时区来计算和显示时间戳。在沟通和协作方面,可以建立一个明确的时间协调机制,以确保不同团队之间能够顺畅地进行交流和协作。

题外话:       ISO 8601 格式 UTC 字符串中的 Z 是什么含义? —— 由此引申出对NATO国际音标通讯代码的介绍

可能又有好奇的小伙伴会问了,既然 T 表示 Time ,那 Z 是否就表示 Zero 呢?

         

        —— 哈哈,为了方便记忆,螺丝刀本人当然是认为可以的,但为了尊重原意,螺丝刀特意去搜寻了一番,原来这个字母 Z 的背后大有来头,它的全拼为 Zulu  —— 其作为时区表示方式的名称起源于北约(NATO)标准,在这个标准中,每个字母代表一个特定的时区,并以字母表中的顺序来排列。"Zulu"是字母表中最后一个字母,代表的是0时区,也就是格林威治标准时间(GMT)。因此,"Zulu"成为了表示格林威治标准时间的简便方式。此外,"Zulu"这个单词在英语中也有"最终"或"最后"的意思,符合其代表0时区的含义。

         —— 然而更有趣的是,在螺丝刀英语学习过程中也见过这个 NATO(北约) 国际通讯码,其在一些日常生活也常有用到它的场景,比如 —— 订酒店的时候会用到这个音标通讯码来报自己的英文名字,尤其是在电话或无法面对面交流的情况下。因为不同的人可能来自不同的国家,使用本国语言的发音会导致交流困难,而NATO音标则是一种标准的国际通用语音符号,因此能够在跨国交流中起到很好的辅助作用。在国际航空业中也常使用NATO音标来进行通讯,以确保准确性和清晰度。

        是不是觉得这次收获不少? 学习了 UTC 和 GMC 的同时,还学会了一个生活技巧!

        下面螺丝刀把 NATO(北约) 国际通讯码 列出来供大家学习记忆 (说白了就是字母 A-Z 通过一个单词念出来,就和你在电话里诉别人你姓张,张飞的张,一个道理)

🎏 童鞋你学废了吗? 如果觉得有用,欢迎点赞三连,最后 —— 祝儿童节快乐 ~

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

削尖的螺丝刀

我就随便打开看看,非常佛系..

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值