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

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

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

settings.py

  1. TIME_ZONE = 'UTC'
  2. USE_I18N = True
  3. USE_L10N = True
  4. USE_TZ = True

页面.html

  1. {% load tz %}
  2. <div>
  3. {{ start_time | localtime }}
  4. </div>
  5. and
  6. <div>
  7. {% localtime on %}
  8. {{ start_time }}
  9. {% endlocaltime %}
  10. </div>

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

zpjtge22

zpjtge221#

使用django timezone module

  1. from django.utils import timezone
  2. now = timezone.now()
xuo3flqw

xuo3flqw2#

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

  1. from django import template
  2. register = template.Library()
  3. @register.filter
  4. def localTime(time):
  5. time = time.isoformat(" ",'seconds')
  6. 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(我的模板文件)

  1. {% load custom_filters %}
  2. .
  3. .
  4. <p class="daysBox">local time: {{ sub.expiryDate|localTime|safe }}</p>
  5. .
  6. .
  7. .

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

  1. project(BASE_DIR)
  2. |-- app
  3. |--- __init__.py
  4. |--- models.py
  5. |--- etc..
  6. |--- templatetags
  7. |-- __init__.py
  8. |-- custom_filters.py

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

展开查看全部
fnx2tebb

fnx2tebb3#

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

  1. from django.utils import timezone
  2. utc_time = timezone.make_aware(my_model.timestamp, timezone.utc)
  3. local_time = timezone.localtime(utc_time)

相关问题