Django:模型数据不在本地时区显示

时间:2018-07-10 04:56:15

标签: django django-templates utc pytz

我正在使用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

有什么想法吗? 预先感谢!

2 个答案:

答案 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)

您尝试过吗?

TIME_ZONE = 'UTC'

这里是list