[英]How Do I Convert UTC Time To User's Local Time in Django?
这些答案没有帮助:
所有日期时间数据都以 UTC 格式存储在我的数据库中。
我希望我的每个用户都能看到他们本地时区的日期时间,而不是 UTC。 我试过下面的代码:
设置.py
TIME_ZONE = 'UTC'
USE_TZ = True
视图.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,})
主页.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)
蟒蛇 3.6.8
有效的时区值基于 Linux 和其他 Unix 系统使用的 tz(时区)数据库。 这些值是“区域/位置”形式的字符串 (xsd:string),其中:
区域是大陆或海洋的名称。 区域目前包括:
位置是城市、岛屿或其他区域名称。
区域名称和输出缩写遵循 POSIX(便携式操作系统接口)UNIX 约定,它使用格林威治以西的正 (+) 号和格林威治以东的负 (-) 号,这与通常预期的相反。 例如,“Etc/GMT+4”对应于 UTC 后 4 小时(即格林威治以西),而不是 UTC(协调世界时)(格林威治以东)提前 4 小时。
您可以在 settings.py 中更改时区,如下所示
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Kolkata'
USE_I18N = True
USE_L10N = True
USE_TZ = True
我已经从 SQLite 迁移到 Postgres 并进行了以下更改:
模型.py
前:
从 django.db 导入模型
class TimeModel(models.Model):
sample_text = models.CharField(max_length=255)
time = models.DateTimeField(auto_now=True) # changed time to dt
def __str__(self):
return str(self.time) + ' ' + self.sample_text
后:
from django.db import models
class TimeModel(models.Model):
sample_text = models.CharField(max_length=255)
dt = models.DateTimeField(auto_now=True) # changed time to dt
def __str__(self):
return str(self.dt) + ' ' + self.sample_text
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.