Django中TIME_ZONE和USE_TZ问题

问题描述:

在Django开发时,需要创建一条交易记录,交易记录中存在一个【创建时间】的字段,类型为datetime。策略采用python内置库函数datetime生成当前时间作为【创建时间】字段值。但是当web项目运行时报了一个warning

RuntimeWarning: DateTimeField Transaction.start_datetime received a naive datetime (2020-12-26 14:03:47.517804) while time zone support is active.
  RuntimeWarning)

model类

class Transaction(models.Model):
    """ 交易记录 """
    status_choice = (
        (1, '未支付'),
        (2, '已支付')
    )
    status = models.SmallIntegerField(verbose_name='状态', choices=status_choice)
    order = models.CharField(verbose_name='订单号', max_length=64, unique=True)  # 唯一索引
    user = models.ForeignKey(verbose_name='用户', to='User')
    price_policy = models.ForeignKey(verbose_name='价格策略', to='PricePolicy')
    count = models.IntegerField(verbose_name='数量(年)', help_text='0表示无限期')
    price = models.IntegerField(verbose_name='实际支付价格')
    create_datetime = models.DateTimeField(verbose_name='创建时间', null=True, blank=True)
    end_datetime = models.DateTimeField(verbose_name='结束时间', null=True, blank=True)

创建交易记录代码

# 创建交易记录
       policy_object = models.PricePolicy.objects.filter(category=1, title="个人免费版").first()
       models.Transaction.objects.create(
           status=2,
           order=str(uuid.uuid4()),
           user=instance,
           price_policy=policy_object,
           count=0,
           price=0,
           create_datetime=datetime.datetime.now()
       )

原因分析:

Django采用的时区UTC(协调世界时),中国的时区为UTC+08:00,两者之间的偏差为8小时。因为时区的不一致导致出现警告。

Django之TIME_ZONE和USE_TZ讲解

TIME_ZONE和USE_TZ的配置在settings文件中

TIME_ZONE代表使用的时区,默认为UTC
USE_TZ 字段是UTC时间的开关。
当 USE_TZ = True时,系统采用UTC时间;
当 USE_TZ = False时,采用本地时区

下面通过以下例子讲解一下TIME_ZONE和USE_TZ的结果

#本地时间 2020-12-26 14:27:26.546

#TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
#结果 2020-12-26 6:27:26.546  UTC时区

TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
# 结果 2020-12-26 14:27:26.546	本地时区

#TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
# 结果 2020-12-26 14:27:26.546	本地时区

TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
#结果 2020-12-26 6:27:26.546  UTC时区

解决方案:

设置USE_TZ = False

你可能感兴趣的:(后端开发,框架,python,django)