> 数据库 > MongoDB >

MongoDB 时区问题

MongoDB存储时间类型数据时,都是先转换为UTC时间,然后存储到数据库中

下面我们来看一个例子:

MongoDB-TimeZone

如上图

  • 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位来判断时间早晚也是可以的,这里就不深入了介绍了。

构造日期时要完全指定时间

下面的例子会展示为什么要完全指定时间,不能只指定部分时间

MongoDB-date-constructor

本例中,使用字符串来构造日期类型。使用了四种不同构造方式:

  •  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)