MongoDB 时区问题
时间:2015-05-18 01:00 来源:linux.it.net.cn 作者:IT
MongoDB存储时间类型数据时,都是先转换为UTC时间,然后存储到数据库中
下面我们来看一个例子:
如上图
-
new Date() 直接返回带有本地时区的当前时间
-
new Date().toLocaleString() 返回的是包含当前时区信息的时间字符串
我现在在CST(China Standard Time中国标准时),所以字符串代表的时间为2014年2月28号 13:01:40,而new Date()存储在MongoDB中得数据时间为2014-02-28 05:01:38,两者大概相差8小时(忽略操作时间)。而UTC刚好比CST晚8小时,由此可见MongoDB在是把时间转换为UTC时间后存储的。这里也可以不用num来标识文档,而用ObjectId的前8位来判断时间早晚也是可以的,这里就不深入了介绍了。
构造日期时要完全指定时间
下面的例子会展示为什么要完全指定时间,不能只指定部分时间
本例中,使用字符串来构造日期类型。使用了四种不同构造方式:
-
new Date(“2012-2-2″)
-
new Date(“2012-02-2″)
-
new Date(“2012-02-02″)
-
new Date(“2012-02-02 00:00:00″)
产生了两种结果:
-
ISODate(“2012-02-01T16:00:00Z”)
-
ISODate(“2012-02-02T00:00:00Z”)
而且,没有看出容易记忆的逻辑关系。只有一个模式非常清晰,那就是把年月日时分秒全部指定好,那么生成的时间就是我想要的本地时区的时间,存储后MongoDB就转换为UTC标准时间。
(责任编辑:IT)
MongoDB存储时间类型数据时,都是先转换为UTC时间,然后存储到数据库中 下面我们来看一个例子:
如上图
我现在在CST(China Standard Time中国标准时),所以字符串代表的时间为2014年2月28号 13:01:40,而new Date()存储在MongoDB中得数据时间为2014-02-28 05:01:38,两者大概相差8小时(忽略操作时间)。而UTC刚好比CST晚8小时,由此可见MongoDB在是把时间转换为UTC时间后存储的。这里也可以不用num来标识文档,而用ObjectId的前8位来判断时间早晚也是可以的,这里就不深入了介绍了。 构造日期时要完全指定时间 下面的例子会展示为什么要完全指定时间,不能只指定部分时间
本例中,使用字符串来构造日期类型。使用了四种不同构造方式:
产生了两种结果:
而且,没有看出容易记忆的逻辑关系。只有一个模式非常清晰,那就是把年月日时分秒全部指定好,那么生成的时间就是我想要的本地时区的时间,存储后MongoDB就转换为UTC标准时间。 |