django 时区-识别非UTC日期时间时区

lnlaulya  于 2022-11-26  发布在  Go
关注(0)|答案(2)|浏览(191)

我有一个案例,我得到了一个CET日期时间(通过我的API),我想把它保存在我的django数据库中。
当我这样做时,我总是得到一个运行时警告:

datetime.fromtimestamp(last_content_update)

当我添加replace部分时,我没有得到错误,但我的日期不正确(1h shift):

datetime.fromtimestamp(last_content_update).replace(tzinfo=utc)

你知道我如何加载我的日期时间时区意识吗?

7z5jn7bk

7z5jn7bk1#

好了,最后我发现fromtimestamp()需要一个时区参数!
就这样做吧:

datetime.fromtimestamp(last_content_update, tz=pytz.timezone("Europe/Paris"))

Here is a link添加到文档中。

isr3a4wc

isr3a4wc2#

您需要分两步完成此操作:
1.首先,让datetime具有时区感知能力-在您的情况下,使用CET(中欧时间)时区。
1.其次,在保存之前将日期时间转换为UTC,这是因为Django将日期时间保存为UTC:
当启用时区支持时,Django会将UTC格式的日期时间信息存储在数据库中...
这可以这样来完成:

import pytz    
from django.utils import timezone

# Convert the naive datetime into a CET datetime
local_datetime = timezone.make_aware(naive_datetime, pytz.timezone('CET'))

# Convert the CET datetime to UTC
utc_datetime = local_datetime.astimezone(timezone.utc)

# Now it can be saved in the database on a model field
MyDateModel.objects.create(title='Another date model',
                           created=utc_datetime)

相关问题