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. 搭建Istio基础环境

    需求 搭建istio基础环境(基于1.5.1版本) 安装步骤 在安装 Istio 之前,需要一个运行着 Kubernetes 的环境,安装步骤可以参考前面的文章 下载istio,然后解压,然后将 is ...

  2. OpenStack知识点详解

    一:云计算     一.起源 1. 云计算这个概念首次在2006年8月的搜索引擎会议上提出,成为了继互联网.计算机后信息时代的又一种革新(互联网第三次革命). 2. 云计算的核心是将资源协调在一起,使 ...

  3. DataFrame的apply用法

    DataFrame的apply方法: def cal_value_percent(row,total_value): row['new_column']=row[estimated_value_col ...

  4. java方法句柄-----5.Method Handles in Java

    Method Handles in Java 目录 Method Handles in Java 1.介绍 2.什么是MethodHandle 3. Method Handles vs Reflect ...

  5. Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

    试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...

  6. Java实现 LeetCode 525 连续数组

    525. 连续数组 给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度). 示例 1: 输入: [0,1] 输出: 2 说明: [0, 1] 是具有相同数量0和1的最长连续 ...

  7. SQL server 导入数据 (excel导入到SQL server数据库)

    打开数据库SQL server ,右键数据库,任务,导入数据 点击下一步 选择数据源类型 选择路径,点击下一步 选择将要生成的类型 选择登陆方式 选中,点击下一步 点击编辑映射可以修改将要生成的表,点 ...

  8. Linux 日志轮替

    日志轮替包括两个方面的内容:切割日志文件,轮换日志文件 日志文件的命令规则 如果配置文件中有dateext参数,那么日志文件的后缀会是日期,例如:yum.log-20200424,这样,文件名不会重叠 ...

  9. linux下git相关命令

    请参照以下文章:https://www.cnblogs.com/pengtangtang/articles/PengTangTang_git_one.html

  10. 4.keras-交叉熵的介绍和应用

    keras-交叉熵的介绍和应用 1.载入数据以及预处理 import numpy as np from keras.datasets import mnist from keras.utils imp ...