Django 中的时间处理
操作系统为OS X 10.9.2,Django为1.6.5.
1.时区
在setting.py文件中设置了时区
TIME_ZONE = 'Asia/Shanghai' # 设置时区为UTC+8
USE_TZ = True
Django的admin页面中显示的日期为北京时间(UTC-8):
在MySQL数据库中存储的时间为:
时间不一致的原因时:在setting.py文件中进行时区设置后,Django内部会自动把时间当成北京时间(UTC-8)对待,但MySQL数据库中还是存储为标准时区时间。
要实现的目标:查询某天的条目。
代码:
from datetime import date, timedelta
today = date.today() # 今天的日期
d = today
d2 = today+timedelta(days=1)
temp['articles'] = Article.objects.filter(timestamp__range=(d,d2))
出现报错:/Library/Python/2.7/site-packages/Django-1.6.5-py2.7.egg/django/db/models/fields/__init__.py:848: RuntimeWarning: DateTimeField Article.timestamp received a naive datetime (2014-08-04 00:00:00) while time zone support is active.(RuntimeWarning)
修改后的代码:
from django.db.models import Min
from datetime import timedelta
from django.utils import timezone
firstday = Article.objects.aggregate(Min('timestamp'))['timestamp__min']
d1 = firstday.replace(day=1,hour=0,minute=0,second=0,microsecond=0)
now = timezone.now() # 今天的日期
# 查询从本月1号到今天的条目
while(d1<now):
d2 = d1 + timedelta(days=1)
a = Article.objects.filter(timestamp__range=(d1,d2))
d1 = d2
各种时间方法获得的时间格式不同:
>>> a.timestamp # 数据库中存储的包含时区的标准时区时间
datetime.datetime(2014, 8, 7, 5, 21, 16, tzinfo=<UTC>)
>>>
>>> from datetime import date
>>> today = date.today()
>>> today
datetime.date(2014, 8, 7) # 没有包含时区信息
>>>
>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime.datetime(2014, 8, 7, 13, 51, 20, 925928) # 没有包含时区信息,是北京时间
>>>
>>> from django.utils import timezone
>>> now = timezone.now()
>>> now
datetime.datetime(2014, 8, 7, 5, 53, 29, 798424, tzinfo=<UTC>) #包含时区信息的标准时间
>>>
>>> timezone.localtime(now)
datetime.datetime(2014, 8, 7, 13, 53, 29, 798424, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>) #将标准时间转换为北京时间
参考资料:
http://blog.xsudo.com/archives/1224.html
http://bbs.csdn.net/topics/390517579
http://blog.feshine.net/technology/1220.html
Django 中的时间处理的更多相关文章
- django中navie时间和aware时间详解
navie时间和aware时间: 什么是navie时间?什么是aware时间? navie时间:不知道自己的时间表示的是哪个时区的.也就是不知道自己几斤几两.比较幼稚. aware时间:知道自己的时间 ...
- django中navie time 和 aware time的使用和转换
在django中有关时间被分为navie time 和 aware time两种,前者指的是不带时区标记的时间格式,后者被认为是带有时区标记的时间格式.在django框架的setting.py文件中 ...
- 异步任务队列Celery在Django中的使用
前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- Mysql事务探索及其在Django中的实践(一)
前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...
- 在Django中进行注册用户的邮件确认
之前利用Flask写博客时(http://hbnnlove.sinaapp.com),我对注册模块的逻辑设计很简单,就是用户填写注册表单,然后提交,数据库会更新User表中的数据,字段主要有用户名,哈 ...
- django中request对象详解(转载)
django中的request对象详解 Request 我们知道当URLconf文件匹配到用户输入的路径后,会调用对应的view函数,并将 HttpRequest对象 作为第一个参数传入该函数. ...
- Django中如何使用django-celery完成异步任务1(转)
原文链接: http://www.weiguda.com/blog/73/ 本篇博文主要介绍在开发环境中的celery使用,请勿用于部署服务器. 许多Django应用需要执行异步任务, 以便不耽误ht ...
- Django中的Model(字段)
Model Django中的model是用来操作数据库的,Model是一个ORM框架,我们只需要关心model的操作,而不需要关心到底是哪一种数据库. 一.基本知识: 数据库引擎: Django中自带 ...
随机推荐
- PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20)
PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20) http://www.patest.cn/contests/pat-b-practise/1027 本题 ...
- java面试宝典第二弹
arraylist和linklist的区别,hashmap和hashset的区别,常用的集合有哪些 一.基础内容 容器就是一种装其他各种对象的器皿.java.util包 容器:Set, List, M ...
- 【离线做法 树状数组】luoguP1972 [SDOI2009]HH的项链
与bzoj3585: mex的线段树做法有着异曲同工之妙 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
- 【DB_MySQL】查询语句中各子句的执行顺序
1. FROM 指明查询来源 2. WHERE筛选元组 3. GROUP BY进行分组 4. HAVING 筛选分组 5. SELECT 投影出指定的字段列 6. ORDER BY 对结果集排序 7. ...
- 将find过滤添加到数组
array=($(find . -name "*.txt"))for i in "${array[@]}"; do echo $i; done
- 组队赛Day1第一场 GYM 101350 F. Monkeying Around(线段树)
[题目大意] 有n只猴子坐在树上,m个笑话. 给出每个讲这个笑话的猴子的编号,笑话的编号,和笑话的影响半径. 如果一个树上的猴子听了没听过的笑话,会掉到树下.如果听过并且在树下,就会爬到树上. 问最后 ...
- 【02】markdown在线编辑器
[01]在线编辑器 https://www.zybuluo.com/mdeditor 在线 Markdown 编辑阅读器 pen - 是一个Markdown编辑器工具.demo 你可以试试这个在线的m ...
- CSAPP学习笔记—虚拟内存
CSAPP学习笔记—虚拟内存 符号说明 虚拟内存地址寻址 图9-12展示了MMU如何利用页表来实现这种映射.CPU中的一个控制寄存器,页表基址寄存器(Page Table Base Register, ...
- numpy hstack()
numpy.hstack(tup)[source] Stack arrays in sequence horizontally (column wise). Take a sequence of ar ...
- TOJ 5065: 最长连续子序列
5065: 最长连续子序列 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 140 ...