关于时间格式 GMT,UTC,CST,ISO
GMT:
格林尼治所在地的标准时间
UTC:
协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。
协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。中国大陆采用ISO 8601-1988的《数据元和交换格式信息交换日期和时间表示法》(GB/T 7408-1994)称之为国际协调时间,代替原来的GB/T 7408-1994;中国台湾采用CNS 7648的《资料元及交换格式–资讯交换–日期及时间的表示法》,称之为世界统一时间。
CST:
CST可视为美国、澳大利亚、古巴或中国的标准时间。
美国中部时间:Central Standard Time (USA) UT-6: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的更多相关文章
- GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?
目录 ✍前言 本文提纲 版本约定 ✍正文 GMT:格林威治时间 凭什么格林威治作为标准时间? 地球自转 中国有哪几个时区? 美国有哪几个时区? GMT和Http协议的渊源 UTC:世界标准时间 UTC ...
- 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)是格林尼治平时 ...
- 格林威治时间格式(GMT)与普通时间格式的互相转换
GMT --> 普通时间格式: 方法: function GMTToStr(time){ var date = new Date(time) var Str=date.getFullYear() ...
- 关于GMT UTC CST和Linux时区设置
GMT即格林威治时间:UTC即全球统一时间:GMT和UTC的时间是一样的 北京时间是东八区,即GMT+8或者UTC+8 CST:Central Standard Time (CST) is 6 hou ...
- JS时间格式 GMT格式转换
JavaScript时间格式转换总结 1.当前系统区域设置格式(toLocaleDateString和toLocaleTimeString) 例子:(new Date()).toLocaleDateS ...
- C#本地时间和GMT(UTC)时间的转换
/// <summary> /// 本地时间转成GMT时间 /// </summary> 4 public static string ToGMTString(DateTime ...
- 全网最全!彻底弄透Java处理GMT/UTC日期时间
目录 前言 本文提纲 版本约定 正文 Date类型实现 时区/偏移量TimeZone 设置默认时区 让人恼火的夏令时 Date时区无关性 读取字符串为Date类型 SimpleDateFormat格式 ...
- 时间:UTC时间、GMT时间、本地时间、Unix时间戳
转自:http://blog.csdn.net/u012102306/article/details/51538574 1.UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT ...
- 关于时间:UTC时间、GMT时间、本地时间、Unix时间戳
1.UTC时间 与 GMT时间我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的. 2.UTC时间 与 本地时UTC + 时区差 = 本地时间时区差东 ...
随机推荐
- springmvc数据处理-中文乱码
首先解决中文乱码 通过mvc过滤器解决,在web.xml中配置 <filter> <filter-name>CharacterEncodingFilter</filter ...
- Zabbix漏洞学习
Zabbix介绍 zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵 ...
- 03 . Nginx日志配置及日志切割
Nginx日志 日志对于统计排错来说是非常有利的,Nginx日志主要分为两种: access_log(访问日志)和error_log(错误日志),通过访问日志可以得到用户的IP地址.浏览器的信息,请求 ...
- 网站的安全性对seo优化至关重要-智狐SEO顾问
网站的安全性对seo优化至关重要 作者:智狐zhihuseo 从大的范围来看,网站安全性能也属于seo的范畴之一.域名被恶意泛解析就是网站安全性能低下的特征之一,如果网站域名被恶意泛解析,会直接 ...
- 说了这么多次 I/O,但你知道它的原理么
O 软件目标 设备独立性 现在让我们转向对 I/O 软件的研究,I/O 软件设计一个很重要的目标就是设备独立性(device independence).啥意思呢?这意味着我们能够编写访问任何设备的应 ...
- 当微信小程序遇到云开发,再加上一个类似 ColorUI 的模板,人人都能做小程序了
作为一个 Java 程序员,早就想尝试一把微信小程序,但是一直苦于没有想法,再加上做一个漂亮的页面实在不太擅长. 由于自己比较喜欢历史,经常看历史方面的书.在一次梳理中国现有的朝代时,突然想到,要是可 ...
- Rocket - util - MaskGen
https://mp.weixin.qq.com/s/_aJqf1cFJDK5RVRBhxTWOw 介绍MaskGen的实现. 1. 基本介绍 给定总线宽度beatBytes,根 ...
- jchdl - GSL实例:HalfAdder
https://mp.weixin.qq.com/s/Y97bIro7UlPPFCoPlzgmOQ 半加器电路是指对两个输入相加,输出一个结果位和,没有进位输入的电路. 是实现两个一位二进制数的加法运 ...
- jchdl - RTL Block
https://mp.weixin.qq.com/s/pR6b6i98P9dRU8bhZkKaww 观察Verilog代码可以发现,对逻辑的描述中都是assign和always代码块.这正对应了硬 ...
- java方法句柄-----1.方法句柄类型、调用
目录 方法句柄 1.方法句柄的类型 1.1MethodType类的对象实例的创建 1.1.1 通过指定参数和返回值的类型来创建MethodType.[显式地指定返回值和参数的类型] 1.1.2 通过静 ...