Django自定义过滤器-转换日期时间

pw9qyyiw  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(111)

我正在使用Django应用程序,需要在UI上显示日期时间。日期时间是UTC格式,我需要将其转换为用户的本地时区。为此,我在我的应用程序中实现了此自定义过滤器

from django import template
import pytz

register = template.Library()

@register.filter
def convert_to_localtime(value, user_tz):
    if not value:
        return value
    
    local_tz = pytz.timezone(user_tz)
    local_time = value.astimezone(local_tz)
    print("Conversion function",value, local_time)
    return local_time

字符串
在模板中我使用这个自定义过滤器像这样

{%load custom_filters%}
<span class="text-center match-date-time">{{ match.start_time|convert_to_localtime:user_tz}}</span>


我可以看到自定义过滤器正在执行并将日期时间正确转换为本地时区,因为我可以看到print语句的以下输出

  • 转换函数2023-08-03 17:30:00+00:00 2023-08-03 23:00:00+05:30*

但在UI上我仍然是UTC日期时间而不是转换后的时间。我错过了什么?

mlnl4t2r

mlnl4t2r1#

我认为问题在于显示转换的时间。
试试这个:

{% load custom_filters %}

<span class="text-center match-date-time">
    {{ match.start_time|convert_to_localtime:user_tz|date:"Y-m-d H:i:s" }}
</span>

字符串
或者尝试在你的函数中这样做:

from django import template
import pytz

register = template.Library()

@register.filter
def convert_to_localtime(value, user_tz):
    if not value:
        return value
    
    local_tz = pytz.timezone(user_tz)
    local_time = value.astimezone(local_tz)
    formatted_time = local_time.strftime('%Y-%m-%d %H:%M:%S')
    return formatted_time

相关问题