为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

青春有我 2023-07-18 15:31:54
我在“models.py”中有一个日期时间:class Foo(models.Model):    modified = models.DateTimeField()当我在模板中显示它时,它会根据我的区域设置(我处于英国夏令时间)正确显示:{{ foo.modified }}设置:LANGUAGE_CODE = 'en-gb'TIME_ZONE = 'Europe/London'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True正确输出我所期望的“2020 年 9 月 7 日下午 2:43”(在视图中打印“已修改”给出“2020-09-07 13:43:40.988953+00:00”)。但是,当我尝试将此格式复制到视图中的字符串时,我得到了错误的日期/时间(它没有调整一小时):from django.utils.formats import localizefrom app.models import Foofoo = get_object_or_404(Foo, pk=1)modified = localize(foo.modified, use_l10n=True)print(modified)输出“7 Sep 2020, 1:43 pm”,这是错误的。
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

代码中的对象datetime将位于数据库(或数据库适配器)返回的时区中。通常是 UTC(在本例中),这就是打印值相差一个小时的原因。

这些会自动转换为当前时区(TIME_ZONE默认情况下),以便与用户(表单和模板)进行交互,这就是您的模板视图正确的原因。

如果要将datetime代码中的对象转换为当前时区,请使用localtime()

from django.utils.timezone import localtime

local_modified = localtime(foo.modified)


查看完整回答
反对 回复 2023-07-18
?
九州编程

TA贡献1785条经验 获得超4个赞

from django.utils import timezone

from django.templatetags.l10n import localize



def localize_datetime(value):

    return localize(timezone.template_localtime(value))

我为此目的编写了这个函数。我试图找出 Django 如何处理框中的日期时间字段,在 Django admin 中它会自动将值转换为本地时区并应用 FORMAT_MODULE_PATH 中定义的格式的格式。


所以timezone.template_localtime - 如果 settings.USE_TZ 开启,则将值转换为本地时间


并本地化- 应用格式


查看完整回答
反对 回复 2023-07-18
  • 2 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信