GMT:

格林尼治所在地的标准时间

UTC:

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

协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。中国大陆采用ISO 8601-1988的《数据元和交换格式信息交换日期和时间表示法》(GB/T 7408-1994)称之为国际协调时间,代替原来的GB/T 7408-1994;中国台湾采用CNS 7648的《资料元及交换格式–资讯交换–日期及时间的表示法》,称之为世界统一时间。

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

ISO

是一种时间的表示方法

说明:

gmt是前世界标准时,utc是现世界标准时。

GMT和UTC时间可以认为是一样的, 只不过utc更加精准.

nodejs

 let d = new Date();
console.log( 'default: ',d )
console.log( 'toISOString: ',d.toISOString() )
console.log( 'toUTCString: ',d.toUTCString() )
console.log( 'toLocaleString: ',d.toLocaleString() )
console.log( 'toLocaleDateString: ',d.toLocaleDateString() )
console.log( 'toString: ',d.toString() )
console.log( 'toTimeString: ',d.toTimeString() )
console.log( 'toDateString: ',d.toDateString() )
console.log( 'toJSON: ',d.toJSON() )
console.log( 'toGMTString: ',d.toGMTString() )

default:  2020-03-25T02:53:51.259Z

toISOString: 2020-03-25T02:39:52.230Z
toUTCString: Wed, 25 Mar 2020 02:39:52 GMT
toLocaleString: 2020-3-25 10:39:52
toLocaleDateString: 2020-3-25
toString: Wed Mar 25 2020 10:39:52 GMT+0800 (GMT+08:00)
toTimeString: 10:39:52 GMT+0800 (GMT+08:00)
toDateString: Wed Mar 25 2020
toJSON: 2020-03-25T02:39:52.230Z
toGMTString: Wed, 25 Mar 2020 02:39:52 GMT

mongo 默认存储时间是以UTC表示的,  当我们存储时间的时候,

当有时间字段时:  createTime:{type:Date, default:Data.now}.    相当于 new Date().toISOString().     采用ISO表示法存储在数据库中的.

我们studio 3t查数据库的时候,  发现时间少了8个小时,   其实是没有少,   把它转换成本地时间就没有问题了.  看到的时间就是符合咱们中国人的时间了

UTC+08 就是咱们中国的时间

现在看到的时间就是正确的了.

通过nodejs查询结果时候, 拿到的时间其实是时间对象d,  可以通过 d.toLocaleString   d.toLocaleDateString  d.toTimeString 方法显示正确

通过时间查询的时候.   可以放心的使用时间对象查询.    不要管时区问题.

如我们要查今天的时间登录的用户,    new Date(new Date().setHours(0,0,0))  表示凌晨的时间, 直接查询就OK.

有一个问题,  当我们指定一个时间字符串去创建时间对象的时候,   这个字符串默认就是UTC时间的字符串.

我们一般其实想表达的时间字符串应该是北京时间.   比如要查user表3月21号的数据:

db.users.find({createTime:{$gte:new Date("2020-03-21 UTC+0800"), $lt:new Date("2020-03-22 UTC+0800")}})

或者:

db.users.find({createTime:{$gte:new Date("2020-03-21T00:00:00.000+0800"), $lt:new Date("2020-03-22T00:00:00.000+0800")}})

还有一种可能是根据某天的时间戳查询:

北京时间: 2020-03-21 00:00:00   对应时间戳:1584720000秒

new Date(1584720000000)   直接根据时间对象查询即可,  这里不用管时区问题.

注意:

mongo是以UTC存储的, mongo查询管理工具, 可以设置本地时间查询,  看到时间的就是正常的.

查询的时候, 如果以时间戳查询, 则不用管时区的问题.

查询的时候, 如果以时间字符串查询, 最好指定时区,

时间字符串尾部加Z 表示UTC。   +0800表示加上8时区, 也即本地时间.

网上很多查询方式, 都是自己计算把本地时间加减8小时, 再去存储和查询, 没必要啊.

时间对象.toLocalString() 就是本地时间,      时间对象.toISOString()  就是UTC时间

new Date("2020-03-21 01:00:00 UTC+0800") 以这样的时间字符串创建对象,  然后用这个对象去操作数据库就不会有问题了.

如果加入了具体时间点, 去掉UTC+0800也可以, 默认本地时间字符串.   如果没有指定时分秒,则默认是UTC时间字符串.

===============================

在实际中碰到的问题

因为对数据库和时区不熟悉,  让策划配的时间是 "2020-02-22T16:00:00.000Z"  这样的格式.

正确的格式应该是: "2020-02-22 16:00:00 UTC+0800"  或者 "2020-02-22 16:00:00"

"2020-02-22T16:00:00.000Z" 这个时间字符串是UTC时间     但是策划把这个UTC时间当成了北京时间.   于是配置生效就有问题了

UTC+8=北京时间。     也就需要这个时间 "2020-02-22T16:00:00.000Z" 减去8小时,  才是数据库应该存储的时间.

let d = new Date("2020-02-22T16:00:00.000Z"); d.setHours(d.getHours() - 8)

总结:

为了操作方便,时间字符串的格式应该写为: 2020/02/22 10:00:00  这样的格式.

年月日中间用横杠连接且没有指定时分秒则默认表示UTC时间.   可以指定UTC+0800表示时间字符串格式

时分秒后面加Z表示UTC时间,  不指定Z则表示本地时间.

为了防止出错, 建议年月日中间用斜杠‘/’连接

数据库以UTC存储, 没有任何影响.时间是不会变的,   因为是时间对象, 想以什么格式显示都OK.

关于时间格式 GMT,UTC,CST,ISO的更多相关文章

  1. GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?

    目录 ✍前言 本文提纲 版本约定 ✍正文 GMT:格林威治时间 凭什么格林威治作为标准时间? 地球自转 中国有哪几个时区? 美国有哪几个时区? GMT和Http协议的渊源 UTC:世界标准时间 UTC ...

  2. atitit.GMT UTC Catitit.GMT UTC CST DST CET 星期 月份 节日 时间的不同本质and起源

    atitit.GMT UTC Catitit.GMT UTC CST DST CET 星期 月份 节日 时间的不同本质and起源 1. GMT(Greenwich Mean Time)是格林尼治平时 ...

  3. 格林威治时间格式(GMT)与普通时间格式的互相转换

    GMT --> 普通时间格式: 方法: function GMTToStr(time){ var date = new Date(time) var Str=date.getFullYear() ...

  4. 关于GMT UTC CST和Linux时区设置

    GMT即格林威治时间:UTC即全球统一时间:GMT和UTC的时间是一样的 北京时间是东八区,即GMT+8或者UTC+8 CST:Central Standard Time (CST) is 6 hou ...

  5. JS时间格式 GMT格式转换

    JavaScript时间格式转换总结 1.当前系统区域设置格式(toLocaleDateString和toLocaleTimeString) 例子:(new Date()).toLocaleDateS ...

  6. C#本地时间和GMT(UTC)时间的转换

    /// <summary> /// 本地时间转成GMT时间 /// </summary> 4 public static string ToGMTString(DateTime ...

  7. 全网最全!彻底弄透Java处理GMT/UTC日期时间

    目录 前言 本文提纲 版本约定 正文 Date类型实现 时区/偏移量TimeZone 设置默认时区 让人恼火的夏令时 Date时区无关性 读取字符串为Date类型 SimpleDateFormat格式 ...

  8. 时间:UTC时间、GMT时间、本地时间、Unix时间戳

    转自:http://blog.csdn.net/u012102306/article/details/51538574 1.UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT ...

  9. 关于时间:UTC时间、GMT时间、本地时间、Unix时间戳

    1.UTC时间 与 GMT时间我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的. 2.UTC时间 与 本地时UTC + 时区差 = 本地时间时区差东 ...

随机推荐

  1. c# 优化代码的一些规则——使用is或as和强制类型转换的区别[三]

    前言 使用as和强制类型转换的时候的区别是否仅仅是代码形式上的区别. 答案是肯定不是的. 正文 看两段代码: object o = Factory.GetObject(); Student stude ...

  2. Channels集成到Django消息实时推送

    channel架构图 InterFace Server:负责对协议进行解析,将不同的协议分发到不同的Channel Channel Layer:频道层,可以是一个FIFO队列,通常使用Redis Dj ...

  3. equals()方法练习

    1: package com.aff.equals; public class TestOrder { public static void main(String[] args) { Order o ...

  4. 设计一个多功能的MyTime类 代码参考

    #include <iostream> #include <cstdio> using namespace std; class MyTime { private: int h ...

  5. Beta冲刺 —— 5.30

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.讨论并解决每个人存在的问 ...

  6. 【Mybatis plus 3.2】怎么操作?看看我!(update、limit、between)

    必须是springboot工程 在pom.xml中添加 <dependency> <groupId>com.baomidou</groupId> <artif ...

  7. ActiveMQ 笔记(二)部署和DEMO(队列、主题)

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.部署操作 1. 部署在linux 上的acvtiveMQ 要可以通过前台windows 的页面访问, ...

  8. Vue中将网址、动态网址转为二维码

    1. 首先需要安装相关的依赖包 npm install qrcodejs2 --save 或者 npm install qrcode2 --save 这里选择第二种方式进行安装,如图: 2.templ ...

  9. java实现显示为树形

    ** 显示为树形** 树形结构应用十分广泛. 下面这段代码根据用户添加的数据,在内存中构建一个逻辑上等价的树形结构. 通过ShowTree() 可以把它显示为控制中的样子. 其中: a.add('a' ...

  10. Java实现除去次方数

    ** 除去次方数** 自然数的平方数是:1 4 9 16 25 - 自然数的立方数是:1 8 27 64 125 - 自然数的4次方数是:1 16 81 256 - - 这些数字都可以称为次方数. 1 ...