JS彻底弄懂GMT和UTC时区

目录
  • 前言
  • 一、GMT
    • 什么是GMT
    • GMT的历史
  • 二、UTC
    • 什么是UTC
    • UTC 由两部分构成:
    • UTC的历史
  • 三、GMT vs UTC
  • 四、时区
    • 时区是如何定义的
  • 五、夏令时
    • 什么是夏令时
    • 夏令时的历史
    • 夏令时的争议
  • 六、本地时间
  • 七、JavaScript中的Date

前言

格林威治时间、世界时、祖鲁时间、GMT、UTC、跨时区、夏令时,这些眼花缭乱的时间术语,我们可能都不陌生,但是真正遇到问题,可能又不那么确定,不得不再去查一查,处理完可能过段时间又忘记。今天,我们彻底来梳理一下它们。

一、GMT

什么是GMT

GMT(Greenwich Mean Time), 格林威治平时(也称格林威治时间)。

它规定太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午12点。

GMT的历史

格林威治皇家天文台为了海上霸权的扩张计划,在十七世纪就开始进行天体观测。为了天文观测,选择了穿过英国伦敦格林威治天文台子午仪中心的一条经线作为零度参考线,这条线,简称格林威治子午线。

1884年10月在美国华盛顿召开了一个国际子午线会议,该会议将格林威治子午线设定为本初子午线,并将格林威治平时 (GMT, Greenwich Mean Time) 作为世界时间标准(UT, Universal Time)。由此也确定了全球24小时自然时区的划分,所有时区都以和 GMT 之间的偏移量做为参考。

1972年之前,格林威治时间(GMT)一直是世界时间的标准。1972年之后,GMT 不再是一个时间标准了。

二、UTC

什么是UTC

UTC(Coodinated Universal Time),协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。

UTC 是现在全球通用的时间标准,全球各地都同意将各自的时间进行同步协调。UTC 时间是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以秒为单位的国际原子时所综合精算而成。

在军事中,协调世界时会使用“Z”来表示。又由于Z在无线电联络中使用“Zulu”作代称,协调世界时也会被称为"Zulu time"。

UTC 由两部分构成:

原子时间(TAI, International Atomic Time):

结合了全球400个所有的原子钟而得到的时间,它决定了我们每个人的钟表中,时间流动的速度。

世界时间(UT, Universal Time):

也称天文时间,或太阳时,他的依据是地球的自转,我们用它来确定多少原子时,对应于一个地球日的时间长度。

UTC的历史

1960年,国际无线电咨询委员会规范统一了 UTC 的概念,并在次年投入实际使用。

“Coordinated Universal Time”这个名字则在1967年才被正式采纳。

1967年以前, UTC被数次调整过,原因是要使用闰秒(leap second)来将 UTC 与地球自转时间进行统一。

三、GMT vs UTC

GMT是前世界标准时,UTC是现世界标准时。

UTC 比 GMT更精准,以原子时计时,适应现代社会的精确计时。

但在不需要精确到秒的情况下,二者可以视为等同。

每年格林尼治天文台会发调时信息,基于UTC。

四、时区

随着火车铁路与其他交通和通讯工具的发展,以及全球化贸易的推动,各地使用各自的当地太阳时间带来了时间不统一的问题,在19世纪催生了统一时间标准的需求,时区由此诞生。

时区是如何定义的

从格林威治本初子午线起,经度每向东或者向西间隔15°,就划分一个时区,在这个区域内,大家使用同样的标准时间。

但实际上,为了照顾到行政上的方便,常将1个国家或1个省份划在一起。所以时区并不严格按南北直线来划分,而是按自然条件来划分。另外:由于目前,国际上并没有一个批准各国更改时区的机构。一些国家会由于特定原因改变自己的时区。

全球共分为24个标准时区,相邻时区的时间相差一个小时。

在不同地区,同一个时区往往会有很多个不同的时区名称,因为名称中通常会包含该国该地区的地理信息。在夏令时期间,当地的时区名称及字母缩写会有所变化(通常会包含“daylight”或“summer”字样)。

例如美国东部标准时间叫:EST,Estern Standard Time;而东部夏令时间叫:EDT,Estern Daylight Time。

想查看世界所有时区的名字可以访问这个网站:https://www.timeanddate.com/t...

五、夏令时

什么是夏令时

DST(Daylight Saving Time),夏令时又称夏季时间,或者夏时制。

它是为节约能源而人为规定地方时间的制度。一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。

全球约40%的国家在夏季使用夏令时,其他国家则全年只使用标准时间。标准时间在有的国家也因此被相应地称为冬季时间。

在施行夏令时的国家,一年里面有一天只有23小时(夏令时开始那一天),有一天有25小时(夏令时结束那一天),其他时间每天都是24小时。

绿色部分为2019年统计的在全球施行冬夏令时的国家和地区。

夏令时的历史

1784年,美国驻法国大使本杰明·富兰克林(Benjamin Franklin)提出“日光节约时间制”。1908年,英国建筑师威廉·维莱特(William Willett)再次提出,但当时该提案并未被采纳。

1916年,处于一战时期的德国政府下令将时钟推至一个小时后,通过获得额外一小时的日光来节省战争所需的煤炭,成为第一个实行夏时制的国家。随后,英法俄美四个一战参战国纷纷效仿。

美国在一战结束后于1919年取消夏时制,但在1942年二战时,美国重新启动夏令时制,1966年正式立法确定永久使用。1973至1975年石油危机爆发期间,美国连续两年延长夏令时制,以节省石油。

欧洲大部分国家则是从1976年——第四次中东战争导致首次石油危机(1973年)的3年后才开始施行夏令时制。

1986年4月,中国国务院办公厅发出《在全国范围内实行夏时制的通知》,要求全民早睡早起节约能源:每年4月中旬的第一个星期日2时,将时钟拨快一小时;10月中旬第一个星期日的2时,再将时钟拨慢一小时。但此夏令时只实行了6年,在1992年停止施行,主因是中国东西地域广阔却只奉行一个北京时间,实时夏令时制带来很多不切实际的反效果。

夏令时的争议

从过去的100多年来看,夏令时往往是在国家发生严重危机(如战争和能源短缺)的情况下才会受到青睐。而在相对和平的近10年里,这种时间制度则变得越来越不受欢迎。

它会使得人们的生物钟被扰乱,常常陷入睡眠不足的情况,不仅对人体健康有害、导致车祸,还会对旅游、航空领域造成极大的混乱。

另外,冬、夏令时究竟能否起到节能的作用,也仍有待商榷。美国一项截至2014年3月的研究表明,这种时间转换制度最多能在3、4月帮助美国减少1%的用电量,而美国国家标准局则认为,夏令时对用电量没有丝毫影响。

在俄罗斯,此前的一份报告也显示,夏令时帮助俄罗斯每年节约的电量,仅相当于两三个火力发电厂的发电量,十分的“鸡肋”。

去年(2019年)3月26日,作为全世界第一个提出并实行夏令时的国家,德国,在欧洲议会上以410比192的赞成票通过了取消冬、夏令时转换制提案,拟定于2021年4月起,所有欧盟国家不再实行冬、夏令时转换。待各成员国形成最终法案后,将选择永久使用夏令时时间或是冬令时时间。

六、本地时间

在日常生活中所使用的时间我们通常称之为本地时间。这个时间等于我们所在(或者所使用)时区内的当地时间,它由与世界标准时间(UTC)之间的偏移量来定义。这个偏移量可以表示为 UTC- 或 UTC+,后面接上偏移的小时和分钟数。

七、JavaScript中的Date

得到本地时间,在不同时区打印 new Date() ,输出的结果将会不一样:

new Date();

得到本地时间距 1970年1月1日午夜(GMT时间)之间的毫秒数:

new Date().getTime();

返回本地时间与 GMT 时间之间的时间差,以分钟为单位:

new Date().getTimezoneOffset();

如何在任何地方都能正确显示当地时间(只要知道该地的timezone):

//目标表时间,东八区
let timezone = 8;
//获取本地时间与格林威治时间的时间差(注意是分钟,记得转换)
const diff = new Date().getTimezoneOffset();
//根据本地时间和时间差获得格林威治时间
const absTime = new Date().getTime() + diff * 60 * 1000;
//根据格林威治时间和各地时区,得到各地时区的时间
let localTime = new Date(absTime + timeZone * 60 * 60 * 1000);
//处理夏令时(isDST为自己封装的处理方法)
if(isDST(localTime, country)) {
  localTime = new Date(absTime + (timeZone + 1) * 60 * 60 * 1000);
}
return localTime;

以上就是JS彻底弄懂GMT和UTC时区的详细内容,更多关于JS的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用js判断当前时区TimeZone是否是夏令时

    复制代码 代码如下: var d1 = new Date(2009, 0, 1); var d2 = new Date(2009, 6, 1); if (d1.getTimezoneOffset() != d2.getTimezoneOffset()) { alert('Daylight Saving Time'); //夏令时 } else { alert('Daylight Time'); //非夏令时 }

  • js获得当前时区夏令时发生和终止的时间代码

    复制代码 代码如下: <!DOCTYPE html> <html> <head> <title>DST Calculator</title> <script type="text/javascript"> function DisplayDstSwitchDates() { var year = new Date().getYear(); if (year < 1000) year += 1900; var

  • JavaScript 脚本将当地时间转换成其它时区

    但是,如果你想显示不同地区的时间---例如,如果你的本部在别的国家,你想查看"本国"时间而非当地时间,又该怎么办呢?要做到这一点,必须进行各种时间计算才能将当地时间转换为目的时间.本文将解释如何进行这些计算. 第一步: 事情的第一步是获得当地时间.在JavaScript中,这无疑可以通过初始化一个Data()对象来轻松完成. // create Date object for current location d = new Date(); 通过调用Data()对象的getTime()

  • Javascript 日期处理之时区问题

    复制代码 代码如下: //dateObj是一个日期对象,days表示给这个日期加多少天,比如说4,5(天) function dateAdd(dateObj,days){ var tempDate = dateObj.valueOf(); tempDate = tempDate + days * 24 * 60 * 60 * 1000; tempDate = new Date(tempDate); return tempDate; } //然后使用,创建一个日期对象 var dateValue

  • JS时间戳与日期格式互相转换的简单方法示例

    JS和jQuery用了一段时间,最近发现他们没有自带的时间戳格式化函数,于是综合网上相关的时间戳格式化函数,自己写了一个时间戳格式化函数DateToTime,这个函数提供了多种格式化样式: Y-m-d,Y-m-d H:i:s,Y/m/d,Y/m/d H:i:s,Y年m月d日,Y年m月d日 H:i:s 这里的时间有时仅输入Y-m-d H:i也是可以使用的 /**  * [TimeToDate时间戳转换为日期]  * @param {[type]} unixTime [时间戳]  * @param 

  • JavaScript获取时区实现过程解析

    在一个大型的项目中,不可避免会出现操作时间的业务,比如时间的格式化,比如时间的加减,我们一般会直接使用moment.js库来做,毕竟稳定可靠,也方便,那当我们系统只是几个简单页面,对时间的操作并不是很大,引入库文件并不是很必须的情况,我们需要时区展示怎么办?是不是可以用浏览器支持的原生方法来实现? 时区 啥是时区? 时区是地球上的区域使用同一个时间定义.以前,人们通过观察太阳的外置(时角)决定时间,这就使得不同经度的地方的时间各有不同,为了统一使用同一个时间,就引入了时区的概念.时区通过设立一个

  • javascript时区函数介绍

    js的时区函数: 设datename为创建的一个Date对象 ==================== datename.getTimezoneOffset() --取得当地时间和GMT时间(格林威治时间)的差值,返回值以分钟为单位 ==================== 举例:根据本地时间获得GMT时间和任意时区的时间 d=new Date(); //创建一个Date对象 localTime = d.getTime(); localOffset=d.getTimezoneOffset()*6

  • Javascript 世界时区时间显示代码

    Javascript 世界時間時間顯示 //https://gist.github.com/1326893https://gist.github.com/1326893 //20120511 Geovin Du 塗聚文 function calcTime(city, offset) { var d = new Date(); utc = d.getTime() + (d.getTimezoneOffset() * 60000); var nd = new Date(utc + (3600000

  • javascript+php实现根据用户时区显示当地时间的方法

    本文实例讲述了javascript+php实现根据用户时区显示当地时间的方法.分享给大家供大家参考.具体如下: 在跨时区应用中会用到下面代码,这是以前写的一段代码. 服务器保存相关时间配置,保存形式为GMT时间,客户端需要根据客户所在时区做相应显示,以符合客户习惯. 1. JavaScript代码如下: window.onload = function() { //TODO begin 处理登陆用户时区 //获得登陆用户时区与GMT时区的差值 var exp = new Date(); var

  • JS彻底弄懂GMT和UTC时区

    目录 前言 一.GMT 什么是GMT GMT的历史 二.UTC 什么是UTC UTC 由两部分构成: UTC的历史 三.GMT vs UTC 四.时区 时区是如何定义的 五.夏令时 什么是夏令时 夏令时的历史 夏令时的争议 六.本地时间 七.JavaScript中的Date 前言 格林威治时间.世界时.祖鲁时间.GMT.UTC.跨时区.夏令时,这些眼花缭乱的时间术语,我们可能都不陌生,但是真正遇到问题,可能又不那么确定,不得不再去查一查,处理完可能过段时间又忘记.今天,我们彻底来梳理一下它们.

  • 一文让你彻底弄懂js中undefined和null的区别

    目录 前言 一.基本概念 1.undefined 2.null 二.简单区别 三.表现形式 1.typeof 2.==与=== 3.Object.prototype.toString.call 4.+运算与Number() 5.JSON.stringify 6.letundefiend='test' 四.建议 附:null在类型判断时为什么是object 总结 前言 undefined 和 null 的区别是个老生常谈的话题了,之前我对二者的区别只是简单理解,例如二者转成 Boolean 类型都

  • 彻底弄懂 JavaScript 执行机制

    不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序.因为javascript是一门单线程语言,所以我们可以得出结论: javascript是按照语句出现的顺序执行的 看到这里读者要打人了:我难道不知道js是一行一行执行的?还用你说?稍安勿躁,正因为js是一行一行执行的,所以我们以为js都是这样的: let a = '1'; console.log(a); let b = '2'; console.lo

  • 一文弄懂JavaScript的继承方式

    目录 JavaScript中的继承方式 问:JavaScript中有几种继承方式呢 问:每种继承方式是怎么实现的呢 盗用构造函数 组合继承 原型链式继承 寄生式继承 寄生时组合继承 JavaScript中的继承方式 问:JavaScript中有几种继承方式呢 emmm...六种?五种?还是四种来着... 这次记清楚了 一共有五种继承方式 盗用构造函数 (经典继承方式 ) 组合继承 原型链式继承 寄生式继承 寄生式组合继承 问:每种继承方式是怎么实现的呢 盗用构造函数 基本思路很简单:在子类构造函

  • 彻底弄懂CSS盒子模式系列教程集合

    blueidea终于可以出点让人惊呀的东西了,一直对clear和position不太理解,没想到这次的系列教程全给提及到了,不错,赞一下. 彻底弄懂CSS盒子模式之一彻底弄懂CSS盒子模式之二彻底弄懂CSS盒子模式之三彻底弄懂CSS盒子模式之四彻底弄懂CSS盒子模式之五

  • 一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系

    以下内容都是针对Pytorch 1.0-1.1介绍. 很多文章都是从Dataset等对象自下往上进行介绍,但是对于初学者而言,其实这并不好理解,因为有的时候会不自觉地陷入到一些细枝末节中去,而不能把握重点,所以本文将会自上而下地对Pytorch数据读取方法进行介绍. 自上而下理解三者关系 首先我们看一下DataLoader.next的源代码长什么样,为方便理解我只选取了num_works为0的情况(num_works简单理解就是能够并行化地读取数据). class DataLoader(obje

  • 一篇文章弄懂MySQL查询语句的执行过程

    前言 需要从数据库检索某些符合要求的数据,我们很容易写出 Select A B C FROM T WHERE ID = XX  这样的SQL,那么当我们向数据库发送这样一个请求时,数据库到底做了什么? 我们今天以MYSQL为例,揭示一下MySQL数据库的查询过程,并让大家对数据库里的一些零件有所了解. MYSQL架构 mysql架构 MySQL 主要可以分为 Server 层和存储引擎层. Server层 包括连接器.查询缓存.分析器.优化器.执行器等,所有跨存储引擎的功能都在这一层实现,比如存

  • Spring Boot访问静态资源css/js,你真的懂了吗

    一.前言 我们用 Spring Boot 搭建 Web 应用时(如搭建一个博客),经常需要在 Html 中访问一些静态资源,比如: css 样式: js 脚本: favicon.ico 图标等: 而在 Spring Boot 中如果没有做任何配置,是无法直接访问静态资源的,通常会报 404 错误: 二.Spring Boot 访问静态资源的默认目录 Spring Boot 访问静态资源,默认有两个默认目录: classpath/static 目录:src/mian/resource Servle

  • Java 基础语法让你弄懂类和对象

    目录 Java 基础语法 一.类与对象的初步认知 二.类和类的实例化 三.类的成员 1. 字段/属性/成员变量 2. 方法 3. static 关键字 四.封装 1. private 实现封装 2. getter 和 setter 方法 五.构造方法 1. 基本语法 2. this 关键字 六.认识代码块 1. 什么是代码块 2. 本地代码块 3. 实例代码块 4. 静态代码块 七.补充说明 1. toString 方法 2. 匿名对象 八.总结 Java 基础语法 其实在学习 C 语言时就一直

  • 前端JavaScript彻底弄懂函数柯里化curry

    目录 一.什么是柯里化( curry) 二.柯里化的用途 三.如何封装柯里化工具函数 一.什么是柯里化( curry) 在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术. 举例来说,一个接收3个参数的普通函数,在进行柯里化后, 柯里化版本的函数接收一个参数并返回接收下一个参数的函数, 该函数返回一个接收第三个参数的函数. 最后一个函数在接收第三个参数后, 将之前接收到的三个参数应用于原普通函数中,并返回最终结果. 数学和计算科学中的柯里化: // 数

随机推荐