Django忽略时区设置

xwbd5t1u  于 2023-05-08  发布在  Go
关注(0)|答案(1)|浏览(93)

我试图在我的Django项目中创建一个时区设置为欧洲/罗马的记录。
当我创建模型对象时,我使用这个函数来设置时区:

MyModel.objects.create(
    name="trial",
    date=datetime_aware("2023-08-15")
)

然而,我遇到了一个问题,记录存储的日期是“2023-08-14”和UTC时区(GMT),尽管我努力将其设置为欧洲/罗马。
为此,我首先在www.example.com文件中设置以下值settings.py:

USE_TZ = True
TIME_ZONE = "Europe/Rome"

接下来,我写了一个函数来创建一个带有适当时区的datetime对象:

def datetime_aware(dt_string, timezone=settings.TIME_ZONE):
    if dt_string:
        dt = datetime.datetime.strptime(dt_string, "%Y-%m-%d")
        dt_aware = make_aware(dt, pytz.timezone(timezone))
        return dt_aware
    return None

你能帮我找出哪里出了问题吗?

taor4pac

taor4pac1#

在第一部分中,看起来你的Django项目使用的是默认时区,即使你单独设置时区,它也可能无法有效工作。在下面,你创建的函数看起来很好,可能是你传递给这里的字符串dt_string有问题:

dt = datetime.datetime.strptime(dt_string, "%Y-%m-%d")
dt_aware = make_aware(dt, pytz.timezone(timezone))

may have different time zone than Europe/Rome 
You may try this code:

def my_model():
tz = pytz.timezone("Europe/Rome")
date = datetime(2023,5,3,tzinfo=tz)
mModel.objects.create(name="trial",date=dt))

这可能会有帮助

相关问题