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. APM 上报信息分析与应用

    在入正题之前我们再回顾下它的架构图: 本文章主要分析AMP各索引的作用,与及结合1.7环境上已接入的服务数据对比后,对索引中的主要字段进行解析.文章分为四个小章节. 1.索引类型 apm索引分为四种类 ...

  2. rfind()的使用

    今天学了一个新函数 rfind 使用: str=123/456 str.rfind('/',1,6) 返回的是从1到6找最后一个/的位置

  3. Java 对象的继承,抽象类,接口

    子父级继承 关键字 extends 首先创建一个父类 class Fu { String name; int a=1; public void word() { System.out.println( ...

  4. Ant标签详解--基础操作

    Ant的一些核心概念: build.xml:构建文件是以XML 文件来描述的,默认构建文件名为build.xml.        project:每个构建文件包含一个工程. property:属性,一 ...

  5. Android_存储之scoped storage&媒体文件

    Scoped storage 文件存储介绍了内部存储和外部存储相关的内容.因为外部存储容易读写,所以在手机中经常看到很多“乱七八糟”的文件或文件夹,这些就是应用肆意创建的. Android Q(10) ...

  6. [PHP学习教程 - 文件]002.修改上传文件大小限制(File Upload Limit)

    引言:通常大家直装xampp之后,默认的文件上传大小应该被设定成2M左右,这个时候如果上传超过2M的东西,就会报错,让人非常尴尬.如何修改呢? 导航索引: 概念 FTP常用API FTP封装类 其他 ...

  7. 节点流(文件流) FileInputStream & FileOutputStream & FileReader & FileWriter

    节点流(文件流) FileInputStream(字节流)处理视频类的                   FileOutputStream(字节流) FileReader(字符流)处理文本文件    ...

  8. win服务器管理软件巧利用——如何让服务器管理事半功倍

    那些服务器管理大牛估计看到这个标题会笑了,服务器怎么管理,靠自带的远程桌面肯定是远远不够的,要实现上千台服务器同时登陆,没有一个好程序管理,估计得三餐不食为其颠倒. 那么,有什么好的服务器推荐呢?站长 ...

  9. Spring AMQP:RabbitTemplate SimpleMessageListenerContainer

    一.RabbitTemplate介绍 RabbitTemplate:消息模板,在与Spring AMQP整合时,进行发送消息的关键类. 包括了可靠性投递消息方法.回调监听消息接口ConfirmCall ...

  10. Java-接口概念辨析

    https://mp.weixin.qq.com/s/HQZhlS-ffgEMqhB2rHax1w 1. 类        是属性成员和方法成员的集合:2. 父类      是子类相同属性成员和方法成 ...