python-3.x 运行时间警告:当时区支持处于活动状态时,DateTimeField收到了一个简单的日期时间[重复]

myss37ts  于 2023-10-21  发布在  Python
关注(0)|答案(2)|浏览(105)

此问题已在此处有答案

RuntimeWarning: DateTimeField received a naive datetime(12个回答)
6天前关闭
我试图测试基于django cart的购物车创建。但是当我尝试创建购物车时,我有以下警告:

RunTimeWarning: DateTimeField received a naive datetime while time zone support 
is active

我做了一些研究,但我不能解决我的问题datetime.datetime.now()
我的测试目录中的test_views.py:

from front.cart import models
import datetime
from django.utils import timezone

def create_cart_in_database():
    cart = models.Cart()
    cart.creationDate = datetime.datetime.now()
    cart.save()

网址:models.py

class Cart(models.Model):
    creationDate = models.DateTimeField()

我也有USE_TZ = True在我的设置。
我试过timezone.now(),但仍然不工作:

def create_cart_in_database():
    creationDate = timezone.now()
RunTimeWarning: DateTimeField Cart.creationDate received a naive datetime 
(2016-06-03 08:46:34.829000) while time zone support is active.

编辑:我现在有这个错误,它似乎是一个与日期时间格式有关的错误?

File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\db\models\fi
elds\__init__.py", line 1399, in to_python
    parsed = parse_datetime(value)
  File "C:\Python27\lib\site-packages\django-1.9.5-py2.7.egg\django\utils\datepa
rse.py", line 93, in parse_datetime
    match = datetime_re.match(value)
TypeError: expected string or buffer
3ks5zfa0

3ks5zfa01#

下面的代码行创建了一个简单的(非时区感知的)日期时间:

creationDate = datetime.datetime.now()

试着把这一行改成:

creationDate = timezone.now()

不要忘记在代码的开头导入timezone

from django.utils import timezone
jpfvwuh4

jpfvwuh42#

如果我们看一下源代码,django.utilts.timezone.now只是datetime.datetime.now,时区设置为UTC。因此,如果你想让它与datetime一起工作,那么使用以下命令:

import datetime
creationDate = datetime.datetime.now(datetime.timezone.utc)

如果在设置特定的日期时间(而不是now)时收到警告,那么使用它应该是的任何时区传递tzinfo。如果是UTC,则非常简单,只需传递datetime.timezone.utc

creationDate = datetime.datetime(2022, 10, 7, 11, 31)  # <--- RuntimeWarning: DateTimeField received a naive datetime ...

creationDate = datetime.datetime(2022, 10, 7, 11, 31, tzinfo=datetime.timezone.utc)  # <--- no warning

如果日期时间应该在特定的时区,那么从Python 3.9开始,zoneinfo模块,它提供了支持IANA时区数据库的实现,在标准库中。例如,如果时区应该是东京(或UTC+09:00),那么可以使用以下内容。

from zoneinfo import ZoneInfo
creationDate = datetime.datetime(2022, 10, 7, 11, 31, tzinfo=ZoneInfo("Asia/Tokyo"))

另一方面,如果你

TypeError: expected string or buffer

fromisoformat: argument must be str

看看你是不是忘了调用这个函数了。timezone.now()/datetime.datetime.now(),而是传递函数本身,例如:timezone.now

相关问题