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

  1. let d = new Date();
  2. console.log( 'default: ',d )
  3. console.log( 'toISOString: ',d.toISOString() )
  4. console.log( 'toUTCString: ',d.toUTCString() )
  5. console.log( 'toLocaleString: ',d.toLocaleString() )
  6. console.log( 'toLocaleDateString: ',d.toLocaleDateString() )
  7. console.log( 'toString: ',d.toString() )
  8. console.log( 'toTimeString: ',d.toTimeString() )
  9. console.log( 'toDateString: ',d.toDateString() )
  10. console.log( 'toJSON: ',d.toJSON() )
  11. 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. python大量造数据

    # -*- coding: utf-8 -*-# date=2020/1/21import timeimport pymysqlimport pymysql.cursors # 获取一个数据库连接,注 ...

  2. 杂谈WebApiClient的性能优化

    前言 WebApiClient的netcoreapp版本的开发已接近尾声,最后的进攻方向是性能的压榨,我把我所做性能优化的过程介绍给大家,大家可以依葫芦画瓢,应用到自己的实际项目中,提高程序的性能. ...

  3. LM NTML NET-NTLM2理解及hash破解

    LM Windows Vista / Server 2008已经默认关闭,在老版本可以遇到,但根据windwos的向下兼容性,可以通过组策略启用它(https://support.microsoft. ...

  4. 被缠上了,小王问我怎么在 Spring Boot 中使用 JDBC 连接 MySQL

    上次帮小王入了 Spring Boot 的门后,他觉得我这个人和蔼可亲.平易近人,于是隔天小王又微信我说:"二哥,快教教我,怎么在 Spring Boot 项目中使用 JDBC 连接 MyS ...

  5. Rocket - decode - 几个问题

    https://mp.weixin.qq.com/s/pMsK_E4mQrm3QXdnp7nDPQ   讨论指令解码部分遗留的几个问题.     1. 最小项与蕴含项之间的关系   参考链接: htt ...

  6. Java 第十一届 蓝桥杯 省模拟赛 反倍数

    反倍数 题目 问题描述 给定三个整数 a, b, c,如果一个整数既不是 a 的整数倍也不是 b 的整数倍还不是 c 的整数倍,则这个数称为反倍数. 请问在 1 至 n 中有多少个反倍数. 输入格式 ...

  7. Java实现 LeetCode 237 删除链表中的节点

    237. 删除链表中的节点 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例 1: ...

  8. Java实现 LeetCode 60 第k个排列

    60. 第k个排列 给出集合 [1,2,3,-,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" &q ...

  9. Java实现DFS深度优先查找

    1 问题描述 深度优先查找(depth-first search,DFS)可以从任意顶点开始访问图的顶点,然后把该顶点标记为已访问.在每次迭代的时候,该算法紧接着处理与当前顶点邻接的未访问顶点.这个过 ...

  10. java实现第六届蓝桥杯打印菱形

    打印菱形 给出菱形的边长,在控制台上打印出一个菱形来. 为了便于比对空格,我们把空格用句点代替. 当边长为8时,菱形为: .......* ......*.* .....*...* ....*.... ...