这些答案没有帮助:
所有日期时间数据都以 UTC 格式存储在我的数据库中。
我希望我的每个用户都能看到他们本地时区的日期时间,而不是 UTC。我试过下面的代码:
设置.py
TIME_ZONE = 'UTC'
USE_TZ = True
views.py
from django.shortcuts import render
from home_app import models
from django.utils import timezone
import pytz
def home_view(request):
timezone.activate(pytz.timezone('Asia/Kolkata'))
sample_queryset = models.TimeModel.objects.all()
return render(request, 'home/home.html', {'sample_queryset': sample_queryset,})
home.html
{% for row in sample_queryset %}
{% load tz %}
{% localtime on %}
{{ row.time }}
{% endlocaltime %}
{% endfor %}
模型.py
from django.db import models
class TimeModel(models.Model):
sample_text = models.CharField(max_length=255)
time = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.time) + ' ' + self.sample_text
但是,毕竟打印的是数据库中相同的UTC时间。
其他细节:
Django 1.11
SQLite(目前;将在生产中使用 Postgres)
python 3.6.8
最佳答案
有效的时区值基于 Linux 和其他 Unix 系统使用的 tz(时区)数据库。这些值是格式为“Area/Location”的字符串 (xsd:string),其中:
Area 是大陆或海洋名称。区域目前包括:
- 非洲
- 美国(北美和南美)
- 南极洲
- 北极
- 亚洲
- 大西洋
- 澳大利亚
- 欧洲
- Etc(行政区域。例如,“Etc/UTC”代表 协调世界时。)
- 印度人
- 太平洋地区
位置是城市、岛屿或其他区域名称。
区域名称和输出缩写遵循 POSIX(可移植操作系统接口(interface))UNIX 约定,在格林威治以西使用正号 (+),在格林威治以东使用负号 (-),这与通常预期的相反.例如,“Etc/GMT+4”对应于 UTC(即格林威治以西)晚 4 小时,而不是 UTC(协调世界时)(格林威治以东)提前 4 小时。
Here is a list all valid timezones
您可以在 settings.py 中更改时区,如下所示
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Kolkata'
USE_I18N = True
USE_L10N = True
USE_TZ = True
关于python - 如何在 Django 中将 UTC 时间转换为用户本地时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55080576/