我正在使用Django 1.11和pytz == 2018.3。
我有一个带有时区字段的聊天模型,该字段不会在本地时间显示。
class Message(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sender')
receiver = models.ForeignKey(User, on_delete=models.CASCADE, related_name='receiver')
message = models.CharField(max_length=1200)
timestamp = models.DateTimeField(auto_now_add=True)
is_read = models.BooleanField(default=False)
当我像这样正常打印时,我得到:
<div class="textcontainer lighter">
{{ message }}
<span class="time-right">{{ message.timestamp|date:"SHORT_DATETIME_FORMAT" }}</span>
</div>
输出:
July 8, 2018, 2:55 a.m
但是,这是UTC时间(提前6个小时。我想换个时间)。
我尝试了以下操作:
{{ message.timestamp|localtime }}
但这没什么用。
我也尝试过包括这两个:
{% load tz %}
{% get_current_timezone as TIME_ZONE %}
在我的settings.py文件中,我有:
USE_L10N = True
USE_TZ = True
有什么想法吗? 预先感谢!
答案 0 :(得分:0)
此处的本地时间表示您在settings.py
文件中设置的时区中的时间,默认情况下为UTC。在您的settings.py
中定义了类似的内容:
TIME_ZONE = 'America/Chicago' # or
TIME_ZONE = 'Asia/Kolkata'
,并且以本地时间显示的所有时间现在都将仅在该时区。
我相信您正在寻找的是用户使用机器的时间,并且在Django中没有内置的功能(据我所知)。您可能需要编写自己的逻辑以根据用户的IP地址获取用户的时区,或者在Javascript的客户端中处理用户的时区,这样可以节省用户在计算机上的时间。另一种选择是在注册时询问用户的时区,并将其保存在数据库中,以供以后进行时区转换。
这是django插件django-easy-timezones,可以为您提供帮助。它基本上是使用中间件来获取所连接用户的IP地址信息,然后使用ip geolocation database将其映射到一个国家/地区,以获取最终用户的时区。
答案 1 :(得分:0)