如何在django模板中显示本地日期时间,从数据库中存储的UTC日期时间?

lyr7nygr  于 2023-07-01  发布在  Go
关注(0)|答案(3)|浏览(235)

我想在Django模板中显示访问者本地时区的日期时间,日期时间存储在数据库中的UTC格式。为此,我在不同的文件中进行了以下更改。

settings.py

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

页面.html

{% load tz %}
<div>
    {{ start_time | localtime }}
</div>

and

<div>
    {% localtime on %} 
        {{ start_time }}
    {% endlocaltime %}
</div>

因为这个start_time只以字符串格式存储'HH:MM'。但是我也尝试过使用date time对象。但对我还是不起作用。
还有一个问题,当我使用datetime.utcnow()datetime.now()时,都在views.py中给出了'UTC'日期时间。
或者建议我,如果有其他方法可以得到同样的?
有没有人可以帮我解决这个问题?任何帮助都将不胜感激。
谢谢你。

zpjtge22

zpjtge221#

使用django timezone module

from django.utils import timezone

now = timezone.now()
xuo3flqw

xuo3flqw2#

我已经尝试了多种方法,但我仍然无法在django中实现这一点,尽管在js中实现起来很简单。所以我使用Django自定义标签来实现它。
custom_filters.py

from django import template
register = template.Library()

@register.filter
def localTime(time): 
    time = time.isoformat(" ",'seconds')
    return f"<span id='django-local-field'></span>\n<script>\nd = new Date(Date.parse('{time}'));document.getElementById('django-local-field').innerHTML = d.toLocaleString();document.getElementById('django-local-field').removeAttribute('id');</script>"

file.html(我的模板文件)

{% load custom_filters %}
.
.
<p class="daysBox">local time:  {{ sub.expiryDate|localTime|safe }}</p>
.
.
.

“sub.expiryDate”是时间变量。也可以编辑“d.toLocaleString();”来自定义格式。如果你想要我的目录结构:

project(BASE_DIR)
|-- app
    |--- __init__.py
    |--- models.py
    |--- etc..
    |--- templatetags
         |-- __init__.py
         |-- custom_filters.py

另外,不要忘记重新启动dev服务器。

fnx2tebb

fnx2tebb3#

如果你使用的是Django的自动时间戳,比如auto_now_add=Trueauto_now=True,Django会自动将时间戳转换为UTC时间。因此,在将时间戳转换为本地时间之前,需要先将其转换为UTC时间。您可以使用timezone.make_aware()将时间戳转换为UTC时间

from django.utils import timezone

utc_time = timezone.make_aware(my_model.timestamp, timezone.utc)
local_time = timezone.localtime(utc_time)

相关问题