问题场景:
在django admin models 实体对象添加一个属性最后修改时间,用户在添加、修改是系统自动修改操作时间。
UpdateTime自动获取系统时间、并且自动修改。
代码设置如下。
class User(models.Model): Name = models.ForeignKey(HotTag,verbose_name = '姓名' )) Desc = models.CharField( '简介' , blank = True , max_length = 50 ) CreateTime = models.DateTimeField( '添加时间' , default = datetime.now()) UpdateTime = models.DateTimeField( '修改时间' ,auto_now = True ,default = datetime.now()) |
上面代码设置是没有问题的。
当放到linux 完全上去跑是,发现UpdateTime和CreateTime(数据库字段)时间和系统时间不一致。
当修改记录是UpdateTime也能自动修改时间就,当是时间还是和系统时间不一致。
问题分析:
django 时区和当前linux系统时间时区不一致。
原来django settings.py 中的配置如下:
# system time zone. TIME_ZONE = 'America/Chicago' |
'America/Chicago' :是美国芝加哥时间
处理方式:
如果把他修改为:
# system time zone. #TIME_ZONE = 'America/Chicago' TIME_ZONE = ‘Asia / Shanghai’ |
Asia/Shanghai (上海时间)
Asia/Beijing (北京时间)
两时区是一致的。
重启django 项目 在登陆后台网站修改用户数据发现这时时间是一致的。
附加内容:
DateField:日期字段,admin 用一个文本框 <input type=”text”> 来表示该字段数据(附带一个 JavaScript 日历和一个”Today”快捷按键。有下列额外的可选参数:
auto_now:当对象被保存时,自动将该字段的值设置为当前时间.通常用于表示 “last-modified” 时间戳;
auto_now_add:当对象首次被创建时,自动将该字段的值设置为当前时间.通常用于表示对象创建时间。
GMT 就是格林威治标准时间的英文缩写(Greenwich Mean Time 格林尼治标准时间),是世界标准时间.
gmt-8 是格林威治时间+8小时,是北京时间.