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

news/2024/10/11 8:02:40/

什么是 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。

题外话:       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:00ZSystem.out.println("UTC时间字符串:" + utcTime);// 输出结果(本地时间为东八区,所以偏移量加8得出):  2023-05-10 22:30:00System.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 通过一个单词念出来,就和你在电话里诉别人你姓张,张飞的张,一个道理)

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


http://www.ppmy.cn/news/142513.html

相关文章

Python之pyecharts的常见用法2-柱状图-折线图

Pyecharts是一个基于Echarts的Python可视化库,可以用Python语言轻松地生成各种交互式图表和地图。它支持多种图表类型,包括折线图、柱状图、散点图、饼图、地图等,并且可以通过简单的API调用实现数据可视化。 Pyecharts的优点包括&#xff1a…

ORBSLAM2`/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol ‘_ZN5boos

可以直接在ORBSLAM2/Examples/ROS/ORBSLAM2下的Cmakelists.txt中添加一行,-lboost_system set(LIBS ${OpenCV_LIBS} ${EIGEN3_LIBS} ${Pangolin_LIBRARIES} ${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so ${PROJECT_SOURCE_DIR}/../../../Third…

/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol ‘_ZN5boost6system1

问题描述: 安装ORB_SLAM2时,编译出现: /usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’ 解决方案:编辑CMakelists文件加入: -lboost_system

RustChinaConf 2023官网上线,精彩议题早知道

随着大会日益临近,我们RustChinaConf 2023筹备委员会的工作也在有条不紊的进行中。最新的好消息来了,官网已上线,访问地址: https://rustcc.cn/2023rustchinaconf/ 从官网进去也可以报名! 大会时间地址 6.17 - 6.1…

[已解决] 编译openmvs出现: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv‘

#ubuntu16.04 配置openmvg与mvs 系统介绍: ubuntu 16.04 Eigen 3.3.7 Ceres-solver 1.14.0 vcglib 1.0.1 编译openmvs出现: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’ FIND_PACKAGE(Boost ${SYSTEM_PACKAGE_REQUIRED} C…

error: undefined reference to symbol '_ZN5boost6system15system_categoryEv

使用boost时遇到下面error: cmake version : 3.5.1 /usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol _ZN5boost6system15system_categoryEv /usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols:DSO…

Undefined reference to symbol '_ZN5boost6system15system_categoryEv'

在编译orb-slam2 的examples时 rgbd stero总是 failed 解决:https://github.com/raulmur/ORB_SLAM2/issues/494 就改这里就行了 I only put -lboost_system inside set(LIBS...) Could show us the error? And your CMakeList.txt

orb slam build bug: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv‘

build_ros.sh时遇到如下错误: /usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol _ZN5boost6system15system_categoryEv /usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line …