mongo-日期类型(2)
mongo中的日期类型,使用ISO格式,例如:ISODate("2012-11-02T07:58:51.718Z")。下面来测试一下:
C:\>mongo 127.0.0.1:2222/test
MongoDB shell version: 1.8.3
connecting to: 127.0.0.1:2222/test
type "help" for help
neu:PRIMARY> db.t2.insert({mydate:ISODate("2012-11-02T07:58:51.718Z")})
neu:PRIMARY> db.t2.find()
{ "_id" : ObjectId("50937ded0847cf5f01606dae"), "mydate" : ISODate("2012-11-02T07:58:51.718Z") }
日期字符串也支持多种格式
neu:PRIMARY> db.t2.insert({mydate:ISODate("2012-11-02 07:58:51")})
neu:PRIMARY> db.t2.insert({mydate:ISODate("20121102 07:58:51")})
neu:PRIMARY> db.t2.insert({mydate:ISODate("20121102")})
neu:PRIMARY> db.t2.find()
{ "_id" : ObjectId("50937ded0847cf5f01606dae"), "mydate" : ISODate("2012-11-02T07:58:51.718Z") }
{ "_id" : ObjectId("509380d22bb20f9946fb9004"), "mydate" : ISODate("2012-11-02T07:58:51Z") }
{ "_id" : ObjectId("509381052bb20f9946fb9005"), "mydate" : ISODate("2012-11-02T07:58:51Z") }
{ "_id" : ObjectId("509381102bb20f9946fb9006"), "mydate" : ISODate("2012-11-02T00:00:00Z") }
我们比较一下mongo中的当前时间与系统当前时间:
neu:PRIMARY> new Date()
ISODate("2012-11-02T08:13:10.250Z")
neu:PRIMARY> ^Z
bye
C:\>date
当前日期: 2012-11-02 星期五
输入新日期: (年月日)
C:\>time
当前时间: 16:13:14.95
输入新时间:
我们看到,mongo中的时间似乎与系统时间相差了8个小时,why?
这是因为mongo中的date类型以UTC(Coordinated Universal Time)存储,就等于GMT(格林尼治标准时)时间。而系统时间使用的是GMT+0800时间,两者正好相差8个小时。
在mongodb与oracle或sqlserver相互同步数据时,需要注意这一点!
如果用python直接读取mongo中的日期,就会发生错误:
>>> import pymongo
>>> conn=pymongo.Connection('127.0.0.1',2222)
>>> db=conn.test
>>> for row in db.t2.find():
... print row['mydate']
...
2012-11-02 07:58:51.718000
2012-11-02 07:58:51
2012-11-02 07:58:51
2012-11-02 00:00:00
2012-11-02 00:00:00
在python中,与之对应的日期是 datetime.datetime.utcnow(),而不是now(),两者正好差8个小时:
>>> import datetime
>>> datetime.datetime.utcnow()
datetime.datetime(2012, 11, 2, 8, 22, 52, 953000)
>>> datetime.datetime.now()
datetime.datetime(2012, 11, 2, 16, 22, 58, 218000)
关于二者的转换,可以参考这个链接:http://www.linuxso.com/linuxbiancheng/12653.html