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

news2024/11/28 12:32:49

什么是 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: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 通过一个单词念出来,就和你在电话里诉别人你姓张,张飞的张,一个道理)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

后端从入门到转岗,如何转型

一、技术介绍 我学习的技术很多: 例如:JAVA JS C# python vue mysql Oracle 等等。 学习也是从入门开始 ,入口是JAVA 二、学习前的准备工作 学习前需要准备什么呢? 我觉得学习前最需要准备的是下定决心吃苦&#xff…

常见数据采集工具介绍

数据采集是指从各种数据源中收集数据并将其存储在一个地方,以便进行分析和处理。数据采集工具是帮助我们自动化数据采集过程的软件或服务。在本文中,我们将介绍一些常见的数据采集工具。 Web Scraper Web Scraper是一种免费的浏览器扩展,可…

低代码平台选型必看!让你少走弯路

目前低代码技术正处在风口,低代码平台产品不断涌现,乱花渐欲迷人眼。作为软件公司或企业IT部门的负责人,在做低代码平台的 选型时需要关注哪些方面,才能顺利“上车”,让低代码为自己的团队赋能? 除了产品功…

我的创作纪念日一周年

今天六一 祝大家节日快乐 ! 文章目录 机缘收获日常成就憧憬 机缘 其实好兄弟早在21年10月就已经注册了csdn账号,但是当初只是用来查找资料,也就是看别人写的博客吧,那时候感觉写博客好难,所以自己迟迟不敢尝试&#x…

如何将Linux命令默认的提示结果不显示或者不输出?以及在脚本中如何替代Ctrl + C等关闭命令的终端窗口?

一、问题描述: 当我们想要获取命令的输出结果时,有时候命令会带出一些默认的提示信息输出到屏幕上,如何过滤掉这个提示信息呢? 例如,telnet命令退出时会默认提示“Connection closed by foreign host.” 例如&#x…

如何使用一站式自动化测试平台TestOne进行App兼容性测试

首先,在讲主题之前,大家先了解移动兼容性测试包括哪些?然后再说,移动兼容性自动化测试方法有哪些?通过一站式自动化测试平台(英文名称:TestOne),具体如何来实现&#xff…

RPG 类型游戏开发基础教程

RPG 游戏开发基础教程 第一步 下载 RPG Maker 开发工具包 1.RPG Maker 是什么? RPG Maker 是由 Enterbrain 公司推出的 RPG 制作工具。 中文译名为 RPG 制作大师。 熟悉的人喜欢简称为 RM。 2、关于 RPG Maker MV? RMMV 是当前 RM 系列最新发行的一款 RPG 制作工…

神奇的开关 — 可控硅

带大家认识下可控硅,以及可控硅的工作原理 ...... by 矜辰所致目录 前言一、什么是可控硅1.1 基本概念1.2 可控硅的结构1.2.1 单向可控硅1.2.2 双向可控硅 二、可控硅的工作原理2.1 可控硅是如何工作的导通条件维持条件关断条件 2.2 工作原理 三、可控硅的参数四、…

Idea+maven+springboot项目搭建系列--2 整合Netty完成客户端服务器端消息收发

前言:Netty 作为主流的nio 通信模型应用相当广泛,本文在spring-boot 项目中集成Netty,并实现客户端以及服务器端消息的接收和发送;本文是 Spring架构篇–2.7 远程通信基础–使用Netty 的扩展; 1 spring-boot jar包引入…

C++进阶 —— (C++11新特性)

三,范围for循环 四,final与override 五,智能指针 六,静态数组array、forward_list、unordered系列(新增容器) 七,默认成员函数的控制 在C中,对于空类编译器会生成一些默认成员函数(如构造函数、拷贝构造函数…

嵌入式Linux驱动开发 03:平台(platform)总线驱动模型

文章目录 目的基础说明开发准备在驱动中获取资源单驱动使用多个资源总结 目的 前面文章 《嵌入式Linux驱动开发 01:基础开发与使用》 和 《嵌入式Linux驱动开发 02:将驱动程序添加到内核中》 介绍了驱动开发最基础的内容,这篇文章将在前面基…

Vue3 小兔鲜4:Layout-静态模版结构搭建

Vue3 小兔鲜4&#xff1a;Layout-静态模版结构搭建 Date: May 31, 2023 目标效果&#xff1a; 分成Nav、Heade、二级路由出口、Footer区域 组件结构快速搭建 Nav <script setup></script><template><nav class"app-topnav"><div clas…

如何用VS2019创建并调用动态库

如何用VS2019创建并调用动态库 创建动态库调用动态库 创建动态库 网上查了相关资料&#xff0c;创建动态库主要有两种方式&#xff0c;一种是通过空项目创建动态库&#xff0c;一种是直接创建动态链接库&#xff0c;本文所总结的就是第二种&#xff0c;直接创建动态链接库。 …

B树(C语言描述)

一.概念 B树是一种多路平衡查找树&#xff0c;不同于二叉平衡树&#xff0c;他不只是有两个分支&#xff0c;而是有多个分支&#xff0c;一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树&#xff0c;B树用于磁盘寻址&#xff0c;它是一种高效的查找算法。 二.性质…

【Kubernetes 入门实战课】Day03——容器的本质

系列文章目录 【Kubernetes 入门实战课】Day01——虚拟机创建及安装 【Kubernetes 入门实战课】Day02——初识容器 文章目录 系列文章目录前言一、容器到底是什么&#xff1f;二、为什么要隔离三、与虚拟机的区别是什么四、隔离是怎么实现的 前言 上一节中我们完成了在Linux虚…

Anaconda下载安装及使用方法汇总

软件说明: Anaconda是Red Hat Linux和Fedora的安装管理程式。它以Python及C语言写成&#xff0c;以图形的PyGTK和文字的python-newt介面写成。它可以用来自动安装配置&#xff0c;使用户能够以最小的监督运行。Anaconda安装管理程式应用在RHEL&#xff0c;Fedora和其他一些项目…

IMX6ULL裸机篇之I2C实验-

一. I2C 实验简介 I2C实验&#xff0c;我们就来学习如何使用 I.MX6U 的 I2C 接口来驱动 AP3216C&#xff0c;读取 AP3216C 的传感器数据。 AP3216C是一个三合一的环境光传感器&#xff0c;ALSPSIRLED&#xff0c;ALS是环境光&#xff0c;PS是接近传感器&#xff0c;IR是红外L…

MANTOO车联网RSU终端助您畅享智慧出行!

一、案例背景 随着社会经济的飞速发展&#xff0c;汽车逐渐走进了千家万户&#xff0c;目前我国家庭乘用汽车保有量在2.6亿辆&#xff0c;平均每6个人就拥有一辆汽车。汽车保有量的上涨同时也给道路交通安全带来了极大的挑战&#xff0c;为了降低交通事故发生&#xff0c;保障…

牛客网项目—开发社区首页

视频连接&#xff1a;开发社区首页_哔哩哔哩_bilibili 代码地址&#xff1a;Community: msf begin 仿牛客论坛项目 (gitee.com) 本文是对仿牛客论坛项目的学习&#xff0c;学习本文之前需要了解Java开发的常用框架&#xff0c;例如SpringBoot、Mybatis等等。如果你也在学习牛…

遗传算法讲解

遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09; 是模拟生物在自然环境中的遗传和进化的过程而形成的自适应全局优化搜索算法。它借用了生物遗传学的观点&#xff0c;通过自然选择、遗传和变异等作用机制&#xff0c;实现各个个体适应性的提高。 基因型 (G…