django中时间保存

django有以下几种时间类型:

django数据库
DateTimeFielddatetime
DateFielddate
TimeFieldtime

这几种类型之中都有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)

不过所谓仁者见仁智者见智,大家觉得那种方便就用那种吧

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值