您的位置:首页 > 编程语言 > Python开发

python,django,mongo的时区问题

2012-12-27 13:55 375 查看
  最近项目中使用django做后台,查询mongo的中数据, 而mongo中的数据是使用python脚本导入的,而查询的时候又是从django中查询的,有需要按时

间查询,导致通过界面中查询的数据跟后面使用脚本查询的数据不一致, 然后跟进去是时区不一直导致的。

  首先介绍下,python中的时间是本地的不带时区的时间,django中的时间是带时区的时间,mongo中存的是utc时间,不带时区,如下:

>> import datetime
>> datetime.datetime.now()
datetime.datetime(2012, 12, 26, 23, 42, 5, 372011)
>> from django.utils import timezone
>> timezone.now()
datetime.datetime(2012, 12, 27, 5, 42, 48, 979966, tzinfo=<UTC>)


  当然你也可以在python使用pytz模块来设置时区, 设置方式如下:

>> tz = pytz.timezone("Asia/Shanghai")
>> datetime.datetime.now(tz)
datetime.datetime(2012, 12, 27, 13, 43, 36, 852530, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)


然后将以上三条数据通过pymongo插入到mongo中,在mongo的命令行中的到如下结果:

{ "_id" : ObjectId("50dbe047d8c2e317e49619f5"), "cur_time" : ISODate("2012-12-26T23:42:05.372Z") }
{ "_id" : ObjectId("50dbe054d8c2e317e49619f6"), "cur_time" : ISODate("2012-12-27T05:42:48.979Z") }
{ "_id" : ObjectId("50dbe061d8c2e317e49619f7"), "cur_time" : ISODate("2012-12-27T05:43:36.852Z") }


从以上的结果可以看出,pymongo会将带时区的时间转换为UTC时间然后在存入到monogo中,不带时区的时间就直接当成UTC时间存入到mongo中,所以以后在项目中要存时间的话一定要考虑时区的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: