如何在 Django 视图代码中本地化日期时间(使用 BST)?

我在“models.py”中有一个日期时间:


class Foo(models.Model):

    modified = models.DateTimeField()

当我在模板中显示它时,它会根据我的区域设置(我处于英国夏令时间)正确显示:


{{ foo.modified }}

设置:


LANGUAGE_CODE = 'en-gb'

TIME_ZONE = 'Europe/London'

USE_I18N = True

USE_L10N = True

USE_TZ = True

正确输出我所期望的“2020 年 9 月 7 日下午 2:43”(在视图中打印“已修改”给出“2020-09-07 13:43:40.988953+00:00”)。


但是,当我尝试将此格式复制到视图中的字符串时,我得到了错误的日期/时间(它没有调整一小时):


from django.utils.formats import localize

from app.models import Foo

foo = get_object_or_404(Foo, pk=1)

modified = localize(foo.modified, use_l10n=True)

print(modified)

输出“7 Sep 2020, 1:43 pm”,这是错误的。


青春有我
浏览 99回答 2
2回答

绝地无双

代码中的对象datetime将位于数据库(或数据库适配器)返回的时区中。通常是 UTC(在本例中),这就是打印值相差一个小时的原因。这些会自动转换为当前时区(TIME_ZONE默认情况下),以便与用户(表单和模板)进行交互,这就是您的模板视图正确的原因。如果要将datetime代码中的对象转换为当前时区,请使用localtime():from django.utils.timezone import localtime local_modified = localtime(foo.modified)

九州编程

from django.utils import timezonefrom django.templatetags.l10n import localizedef localize_datetime(value):    return localize(timezone.template_localtime(value))我为此目的编写了这个函数。我试图找出 Django 如何处理框中的日期时间字段,在 Django admin 中它会自动将值转换为本地时区并应用 FORMAT_MODULE_PATH 中定义的格式的格式。所以timezone.template_localtime - 如果 settings.USE_TZ 开启,则将值转换为本地时间并本地化- 应用格式
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python