django 时间 时区 语言问题
场景:
1.ORM操作Model
中DateField
, DateTimeField
, TimeField
字段时, 数据库(以MySQL举例)中对应存储时间字段的实际情况.
2.django开发中, django服务内部调用其它服务的API接口返回了时间字段, 该时间字段如何处理成前端 (以React.js举例)框架可以正确转换成本地时间的对象.
前置知识:
1.什么是 UTC时间 (自行百度谷歌)
2.常见表示时间的规范: GMT UTC CST 见下面的参考资料1
场景1: 重要结论和实践操作
1.django可以通过setting.py
文件中进行 时间 和 语言 的本地化 配置, 此配置是全局性的.
- 配置意义: 如果用到原生的django admin等, 配置之后界面的时间由UTC变成本地时间, 语言变成本地语言.对用户更加友好.
- 但是, 和数据库中存储的时间并无关系, 下面有详细说明.
默认配置:
略
本地化配置如下:
LANGUAGE_CODE = 'zh-Hans' # 语言
TIME_ZONE = 'Asia/Shanghai' # 时区
USE_I18N = True # 语言
USE_L10N = True # 数据和时间格式
USE_TZ = True # 启用时区
2.django在写数据库的时候, 日期和时间 都用的UTC时间
- 换句话说: 即使进行了上面的本地化配置, 实际
datatime
等时间字段在数据库中也是UTC时间, 会比本地时间(以东八区举例)慢 8h - 可以自己使用
DateTimeField
字段的auto_now
选项来测试每次save
的时候, 数据库时间和当前时间的变动.
class XxModel