网站大量收购独家精品文档,联系QQ:2885784924

Django的timezone应用心得.pdfVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Django的timezone应用心得

2014/10/30 Dj ango的timezone应用心得 Django的timezone应用心得 自从Django1.4开始, django之中就开始使用timezone这个玩意了, 换成中文, 就是时区的意思. 中国地区幅员辽阔, 按照15度一个时区计算,中国横跨5个时区, 但是实际上我们使用的是北京时间的东八区时间, 就是在国际标准时间的基础上, 早了8个小时. 也就是说北京这边看到日出了, 8小时后位于英国的国际标准时间起 点的位置才能看到日出. django既然开始用这个时区了, 那我们也要跟上啊. 结果就是出现了很多意想不到的错误. # 1. 大量的 RuntimeWarning: DateTimeField received a naive datetime (YYYY-MM-DD HH:MM:SS) while time zone support is active 这 种情况就是你的settings.py 中的 USE_TZ True 了, 一旦你设置了这个地方, 你的噩梦就开始了.哈哈, 如果为 了眼不见心不烦, 你可以将它设置为False: USE_TZ False, 这样, django1.4 中出现的timezone你完全不必理会, 还是按照你以前的设置来运行程序. #2. now.date()居然是昨天, 或者明天. 实际上, 确实会遇到这种问题. 举个实例来说吧: 有 新闻(news)模块, News model有个字段为 pub_date, 然后, 你设置客户端访问该条新闻的url为 /news/2013/08/23/ 10086/ 就是按照 /新闻/年/月/ 日/ ID/ 的方式编排, 结果你发现: /news/2013/08/23/ 10086/ 居然是404, 找不到这个新闻, 到数据库中一看, 实际上是存在这条 新闻的, 但是为什么就是看不到这个新闻呢? 经过看文档和django源码, 我终于找到了原因: 先看News model的简单定义: class News(models.Model): title models.CharField(max_length 200) pub_date models.DateTimeField(date published,blank True,default timezone.now) content models.TextField() def get_absolute_url(self): return /news/%s/%d/ % (self.pub_date.strftime(%Y/%m/%d).lower (), self.pk) 1. 可以看到, pub_date我已经让它默认使用django的timezone.now 函数来获取默认时间了(这个时间是支持 timezone的, 这个timezone的值, 就是 settings.py 中定义的 TIME_ZONE Asia/Shanghai (中国只有2个时区字 符串, 一个是上海Asia/Shanghai, 一个是重庆Asia/Chongqing, 以前的政府所在地, 千万不要用北京, 这个在国 际标准中是不存在的) 2. 那么self.pub_date应该是django 中的aware_time了, 那么这个self.pub_date 的date 为啥不对, 导致找不到这条 新闻呢?原因后来我终于发现了, django 在存储 self.pub_date到数据库的时候, 好像是保存为 UTC 时区的, 也就 是说这个self.pub_date和你的服务器项目的settings.py 中设置好的时区 Asia/Shanghai 是不一样的, 也就是说, 最后得到的date可能不是同一天. 所以 self.pub_date.strftime(%Y/%m/%d) 获得的日期的表示, 可能不是你的时区的日期, 而是UTC时区的日期 http://www .360/content/13/1113/14/8504707_328895542.shtml

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档