Django表单中的DateTimeField转为UTC

5 投票
1 回答
3738 浏览
提问于 2025-05-01 09:38

我有一个小的Django应用,里面有一个表单,可以把一些数据保存到数据库里。

这是表单的代码:

class SomeForm(forms.Form):
    time = forms.DateTimeField()
...

这是我用来保存数据的视图代码:

class AccountAddIncome(View):
    def save(self, form):
        model = Model(
            time=form.cleaned_data['time']
        )
        model.save()

    def post(self, request, *args, **kwargs):
        form = SomeForm(request.POST)
        if form.is_valid():
            self.save(form)
            return redirect(self.success_url)
        else:
            ...

我遇到的问题是,Django的后台提示我:"注意:你的时间比服务器时间快了1小时."
我在我的Ubuntu服务器上用date命令查看时间,发现和我电脑上的时间完全一样。

但是,当我把这个对象保存到数据库后,再进行以下查询:

Model.objects.filter(time__lt=timezone.now())

Django在接下来的一个小时内不会显示之前保存的模型。如果我去后台,把时间调回一个小时,Django就会显示那个对象。

所以,我的问题是,管理Django中的日期时间对象,最好的做法是什么?

我想把所有的时间都保存为UTC格式,但我不知道怎么把表单中的日期时间转换成UTC。

暂无标签

1 个回答

-5

去你Django项目的settings.py文件。

把时区设置的那一行注释掉,然后使用 TIME_ZONE = timezone.now()。

from django.utils import timezone


TIME_ZONE = timezone.now()

# TIME_ZONE = 'UTC'
# USE_I18N = True
# USE_L10N = True
# USE_TZ = True

这样你就再也看不到这个提示了 - 注意:你的时间比服务器时间快了1小时。

撰写回答