Django 和时区设置的问题

Django 和时区设置的问题

written on Wednesday, August 19, 2009

Django 1.1 及其之前的版本, 时区处理这一块算是比较混乱的了:

  1. 依赖数据库管理系统本身 (Django 针对 PostgreSQL 做了特殊处理)
  2. 跨平台能力弱 (Python 标准库的 TZ 环境变量依赖 *nix 操作系统)
  3. Windows 下, settings.TIME_ZONE 的值直接被忽略, Django 将使用系统默认本地时间
  4. settings.TIME_ZONE 推荐的值本身缺乏可移植性, 至少在 Webfaction 提供的 Linux 主机中, 无法识别推荐的 'Asia/Shanghai PRC' 时区, 设置为 'Asia/Shanghai' 则正常
  5. 没有提供一个统一的时区 API 和相关 Filter, 导致不同 app 在时区处理处于各自为政的状态, 有的是将 UTC 时间存入数据库, 有的则把本地时间存入数据库
  6. 单一的时区设置 -- 多用户模式下, 不支持用户自定义时区

相关的 Bug 报告:

相关研究:

规避

大部分情况下, 都不太需要更改本地时区, Django 当初设计的时可能也是这么考虑的.

但是, 使用本地时间存数据库显然是缺乏灵活性的. 尤其是美国, 采用多个时区不说, 根据夏令/冬令时段还会调整时间.

Bug #2626 表明 Django 正在努力改进时区处理. 但在 Django 完成改进之前, 新开发的 app, 在不考虑多用户的情况下, 最好是: 把 UTC 时间存入数据库, 前台 view 或 template 再根据设置的显示时区呈现, 尽可能使用 pytz.

参考: Google App Engine 中通过自定义Django的filter解决时区问题

多用户的情况

如果应用是国际化的, 用户地域分布广, 目前 Django 的时区处理功能还无法满足, 需要借助第三方 app : django-timezones

This entry was tagged Django and Timezone

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值