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. Codeblocks运行按钮变灰,卡程序编译

    实际上,当我们点击绿色运行按钮运行之后,.exe文件会开始运行,当我们点击红色调试按钮之后,会开始调试. 因此当我们在运行卡住之后,点击红色调试按钮,实际上并没有真正的结束程序,只是将窗口隐藏起来,我 ...

  2. JavaScript中foreach、map、filter、find、every、some的用法

    foreach:只是循环数组中的每一项,没有返回值 如:  var arr = [2,3,3,4,5,6]; arr.foreach(function(item,index,array){ dosom ...

  3. Redis学习笔记(2)

    一.配置文件(部分) 1. UNITS(单位) 数据单位 2. INCLUDES(包含) 可以包含其他配置文件,而redis.conf作为总的配置文件 3. NETWORK(网络配置) -网络端口的绑 ...

  4. 读Pyqt4教程,带你入门Pyqt4 _009

    QLineEdit QLineEdit 窗口组件用来输入或者编辑单行纯文本,有撤销/重做,剪切/粘贴和拖放功能. #!/usr/bin/python # -*- coding: utf-8 -*- # ...

  5. 获取Class实例的方式与类加载器

    1. java.lang.Class:   是反射的源头 2.如何获取Class的实例(3种) 3.关于类的加载器 TestReflection2 package com.aff.reflection ...

  6. Java实现 蓝桥杯 算法提高VIP Substrings(暴力)

    试题 算法提高 Substrings 问题描述 You are given a number of case-sensitive strings of alphabetic characters, f ...

  7. Java实现 蓝桥杯 算法训练 相邻数对(暴力)

    试题 算法训练 相邻数对 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 ...

  8. Java实现 LeetCode 820 单词的压缩编码(字典树)

    820. 单词的压缩编码 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 ["time", "me", & ...

  9. Java实现 LeetCode 557 反转字符串中的单词 III(StringBuilder的翻转和分割)

    557. 反转字符串中的单词 III 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode c ...

  10. Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers

    [USACO]1.1.2 贪婪的礼物送礼者 Greedy Gift Givers 题目描述 对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少(and vice versa for th ...