小白成长日记之前端时间格式处理:GMT,UTC,DST,CST(北京时间又称中国标准时间)时间的区别及转换

区别

GMT

格林尼治标准时间(旧译格林威治平均时间或格林威治标准时间;英语:GreenwichMeanTime,GMT),也叫世界时(Universal Time),也叫世界标准时间。是指位于英国伦敦郊区的【皇家格林尼治天文台】的标准时间,是本初子午线上的地方时,是0时区的区时。它以地球自转为标准,全球都以此标准设定时间。

时间格式

EEE,DD MMM YYYY HH:mm:ss GMT

EEE代表星期 ,DD代表天,MMM代表月份,YYYY代表年份,HH代表小时,mm代表分钟,ss代表秒。

如:
1、Tue, 29 Nov 2022 03:30:28 GMT
2、3.28 Aug 2009 01:37:46 GMT

UTC

协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。由于地球每天的自转是有些不规则的,而且正在缓慢减速,也就是说有时候 24h 多一点转一圈,有时候还不到 24h 就转了一圈。

UTC 基于国际原子时间,通过不规则的加入闰秒来抵消地球自转变慢的影响,是世界上调节时钟和时间的主要时间标准。它是以原子时作为计量单位的时间,计算结果极其严谨和精密。

它比GMT时间更来得精准,目前UTC与GMT 相差为0.9秒,故二者可以基本视为一致。

DST

DST 是指夏令时间,也叫做日光节约时间(Daylight saving time)。是指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用。它是为节约能源而人为规定地方时间的制度(鼓励人们早睡早起,不要浪费电,夏天日照时间长尽量多用自然资源)。

每年的夏令时时间段还不一样(一般在3月的第2个周日开始),比如美国2020年夏令时时间是:2020年3月8日 - 2020年11月1日。具体做法是:在3.8号这天将时钟往前拨拨1个小时,11.1号这天还原回来。

中国在1986 - 1992年短暂搞过一段时间,但太麻烦就“废弃”了。

目前全世界有近110个国家每年要实行夏令时。 自2011年3月27日开始俄罗斯永久使用夏令时,把时间拨快一小时,不再调回。

冬令时

冬令时就是从夏令时调回来的时间,也就是时光倒退,2点变成1点的那个瞬间,这个1点就是冬令时的开始啦。其实冬令时才是英国“真正”的时间。夏令时的时间要往前调1个小时(+1),那么冬令时一到,时间是需要往后调1个小时(-1),这样一加一减,互相抵消,英国就又回到了零时区。

11月2号凌晨1:59的时候。下一分钟变成了凌晨1:00。

CST

CST可视为美国、澳大利亚、古巴或中国的标准时间。

CST可以为如下4个不同的时区的缩写:

美国中部时间:Central Standard Time (USA) UT-6:00
澳大利亚中部时间:Central Standard Time (Australia) UT+9:30
中国标准时间:China Standard Time UT+8:00
古巴标准时间:Cuba Standard Time UT-4:00

中国位于东八区时区,相对于国际标准时间(UTC/GMT+0:00)的偏移量为UTC/GMT+8:00。这意味着中国标准时间比世界协调时提前8个小时。

美国中部时间位于西六区时区,相对于国际标准时间(UTC/GMT+0:00)的偏移量为UTC/GMT-6:00。这意味着中国标准时间比世界协调时晚6个小时。

美国的CST是UTC-6时区,而中国的CST是UTC+8时区。也就是说,美国的CST时间比UTC时间早6小时,而中国的CST时间比UTC时间晚8小时。

要将CST美国时间转换为中国时间,需要将美国CST时间加上6小时,然后再减去中国CST时间的时差8小时。

时间格式

以中国标准时间为准,我们平时用let time = new Date()得到的就是中国标准时间,也就是UTC/GMT +8.00


1、Thu Jan 11 2024 10:09:55 GMT+0800 (中国标准时间)
2、Fri Aug 28 09:37:46 CST 2009

CST是标准时间,对于中国标准时间,GMT(世界标准时间)加8个小时为CST时间,因此28 Aug 2009 01:37:46 GMT等于 Fri Aug 28 09:37:46 CST 2009

ISO 8601是日期时间表示法

国际标准化组织的国际标准ISO 8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前最新为第三版ISO8601:2004,第一版为ISO8601:1988,第二版为ISO8601:2000。

日期和时间的组合表示法
日期和时间合并表示时,要在时间前面加一大写字母T,如要表示北京时间2004年5月3日下午5点30分8秒,可以写成2004-05-03T17:30:08+08:00或20040503T173008+08。

ISO8601与UTC的区别,其实两者完全是两个东西,通俗的说,iso8601是一种utc时间的表示方式而已。

时间格式

YYYY-MM-DDThh:mm:ssZ

YYYY代表年份,MM代表月份,DD代表天,hh:mm:ss代表时分秒,Z表示UTC世界标准时间

世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间。

如:
2014-11-11T12:00:00对应的中国标准时间为Tue Nov 11 2014 12:00:00 GMT+0800 (中国标准时间)

2014-11-11T12:00:00Z对应的中国标准时间为Tue Nov 11 2014 20:00:00 GMT+0800 (中国标准时间)

时间转换

其他时间格式转中国标准时间格式

//1.时间戳,number类型
new Date(1531561062350)
Sat Jul 14 2018 17:37:42 GMT+0800 (中国标准时间)
//2.yyyy-MM-dd HH:mm:ss
new Date("2014-12-12 10:10:10")
Fri Dec 12 2014 10:10:10 GMT+0800 (中国标准时间)
//3.yyyy-MM-ddTHH:mm:ss(ISO 8601日期时间表示法)
new Date("2024-01-10T10:48:30.682+00:00")
Wed Jan 10 2024 18:48:30 GMT+0800 (中国标准时间)
//4.Sun Jul 08, 2018 16:18:54 GMT(GMT格式)
new Date("Sun Jul 08, 2018 16:18:54 GMT")
Mon Jul 09 2018 00:18:54 GMT+0800 (中国标准时间)
//5.(year, month, day, hour, minutes, seconds, milliseconds)
new Date(2020,10,14,18,20,20)
Sat Nov 14 2020 18:20:20 GMT+0800 (中国标准时间)

中国标准时间转字符串(YYYY-MM-DD hh:mm:ss)

如Fri Dec 10 2021 10:59:53 GMT+0800 (中国标准时间)

我们直接传的标准时间数据类型都是字符串类型,并非时间类型,(Fri Dec 10 2021 10:59:53 GMT+0800 (中国标准时间))是一个字符串,所以要通过new Date(time)转化为标准时间的时间类型(两者数据类型方面一个是字符串类型,一个是时间类型)调取获取年月日时分秒的方法拼接成字符串’YYYY-MM-DD hh:mm:ss’即可

 timeFun(time) {
      var d = time ? new Date(time) : new Date();
      var year = d.getFullYear();
      var month = d.getMonth() + 1;
      var day = d.getDate();
      var hours = d.getHours();
      var min = d.getMinutes();
      var seconds = d.getSeconds();

      if (month < 10) month = "0" + month;
      if (day < 10) day = "0" + day;
      if (hours < 0) hours = "0" + hours;
      if (min < 10) min = "0" + min;
      if (seconds < 10) seconds = "0" + seconds;

      return year + "-" + month + "-" + day + " " + hours + ":" + min + ":" + seconds;
    },

其他时间转字符串(YYYY-MM-DD hh:mm:ss)

由上面可以知道,数字类型的字符串、UTC时间格式的字符串(带T的时间类型)、GMT时间格式的字符串、中国标准时间类型的字符串、甚至(year, month, day, hour, minutes, seconds, milliseconds)类型转为’YYYY-MM-DD hh:mm:ss’只需要通过new Date(time)转成标准时间的时间类型的数据,通过调取获取年月日时分秒的方法拼接成字符串’YYYY-MM-DD hh:mm:ss’即可,即同上。

timeFun(time) {
      var d = time ? new Date(time) : new Date();
      var year = d.getFullYear();
      var month = d.getMonth() + 1;
      var day = d.getDate();
      var hours = d.getHours();
      var min = d.getMinutes();
      var seconds = d.getSeconds();

      if (month < 10) month = "0" + month;
      if (day < 10) day = "0" + day;
      if (hours < 0) hours = "0" + hours;
      if (min < 10) min = "0" + min;
      if (seconds < 10) seconds = "0" + seconds;

      return year + "-" + month + "-" + day + " " + hours + ":" + min + ":" + seconds;
    },

CST时间类型转字符串(YYYY-MM-DD hh:mm:ss)

如CST类型时间:Thu Aug 18 20:38:54 CST 2016

转为中国标准时间应该为xxx xxx xx (20:38:54-八个小时) GMT+0800(GMT+8小时==CST(中国标准时间)),结果应该为Fri Aug 19 2016 12:38:54 GMT+0800 (中国标准时间),但是结果为Fri Aug 19 2016 10:38:54 GMT+0800 (中国标准时间),差了10个小时,好像是Java 获取的CST时间用的和客户端JavaScript则默认采用的时间不是一个时区的,毕竟CST有四个时区在用(待求证)。

因此需要先将CST转成GMT,然后才能用js的API转换为并拼接成’yyyy-MM-dd HH:mm:ss’格式。

getTaskTime(strDate) {
      if (null == strDate || "" == strDate) {
        return "";
      }
      var dateStr = strDate.trim().split(" ");
      var strGMT = dateStr[0] + " " + dateStr[1] + " " + dateStr[2] + " " + dateStr[5] + " " + dateStr[3] + " GMT+0800";
      var date = new Date(Date.parse(strGMT));
      var y = date.getFullYear();
      var m = date.getMonth() + 1;
      m = m < 10 ? ('0' + m) : m;
      var d = date.getDate();
      d = d < 10 ? ('0' + d) : d;
      var h = date.getHours();
      var minute = date.getMinutes();
      minute = minute < 10 ? ('0' + minute) : minute;
      var second = date.getSeconds();
      second = second < 10 ? ('0' + second) : second;

      return y + "-" + m + "-" + d + " " + h + ":" + minute + ":" + second;
    },

字符串(YYYY-MM-DD hh:mm:ss)转其他时间

上面提到字符串(YYYY-MM-DD hh:mm:ss)可以通过new Date(time)转成中国标准时间,问题就转变成了中国标准时间转其他时间类型

//如
let time = new Date("2014-12-12 10:10:10")
//Fri Dec 12 2014 10:10:10 GMT+0800 (中国标准时间)
//1.字符串(YYYY-MM-DD hh:mm:ss)转为 GMT字符串
time.toGMTString();//Wed, 08 Nov 2017 03:40:36 GMT
//2.字符串(YYYY-MM-DD hh:mm:ss)转为 UTC字符串(结果同上)
time.toUTCString();//Wed, 08 Nov 2017 03:40:36 GMT
//3.字符串(YYYY-MM-DD hh:mm:ss)转为 ISO 8601表示
time.toISOString();//'2014-12-12T02:10:10.000Z'
  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值