django有以下几种时间类型:
django | 数据库 |
DateTimeField | datetime |
DateField | date |
TimeField | time |
这几种类型之中都有auto_add和auto_now_add,这两个属性默认都是False
auto_now=Ture,字段保存时会自动保存当前时间,但要注意每次对其实例执行save()的时候都会将当前时间保存,也就是不能再手动给它存非当前时间的值。
auto_now_add=True,字段在实例第一次保存的时候会保存当前时间,不管你在这里是否对其赋值。但是之后的save()是可以手动赋值的。也就是新实例化一个model,想手动存其他时间,就需要对该实例save()之后赋值然后再save()。
class User(models.Model): name = models.CharField(max_length=20, unique=True) password = models.CharField(max_length=256) email = models.EmailField(unique=True) create_time = models.DateTimeField(auto_now_add=True) update_time = models.DateTimeField(auto_now=True)
此时如果对User进行保存的话,数据库中create_time和update_time如下:
会出现时区问题,和本地时间相差八个小时,当然我们可以在mysql中执行 SET GLOBAL time_zone='+08:00';也可以解决问题
如果用django怎么解决呢?
在settings.py中,我们有如下配置
TIME_ZONE = 'Asia/Shanghai' USE_TZ = True
django默认是有运用时区的,我们需要把USE_TZ=False即可
此时再次保存数据,则发现时间为本地时间
网上也有人不建议大家改,说这样不好,如果在不同时区访问我们的网站可能出现问题,
让自己手动去保存当前时间default=datetime.now().replace(tzinfo=utc)
不过所谓仁者见仁智者见智,大家觉得那种方便就用那种吧