【问题标题】:Django timezone gives wrong result even though USE_TZ = True即使 USE_TZ = True,Django 时区也会给出错误的结果
【发布时间】:2020-12-11 12:55:37
【问题描述】:

我有一个这样的模型:

class Entry(models.Model):
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
    text = models.TextField()   
    date_added = models.DateTimeField(default=timezone.now())

模板中显示的添加日期:

{% localtime on %}
  {{ entry.date_added|date:'d M, Y H:i'}}  
{% endlocaltime %}

正如https://docs.djangoproject.com/en/3.0/topics/i18n/timezones 中所建议的那样。

在我的setting.py中,我的USE_TZ = True

但是,输出给了我datetime.datetime(2020, 8, 22, 9, 20, 16, 439533, tzinfo=<UTC>) 或 2020 年 8 月 22 日 9:20 在我的网页中

为什么输出是 UTC?据我了解,知道日期时间意味着它遵循用户的时区。我的时区是 UTC+7,所以应该是 2020 年 8 月 22 日 16:20。

我读过 Retrieve timezone aware DateTimeField in Django 建议更改 TIME_ZONE = 但这不会让它不知道吗?

我能做些什么来解决它?我希望日期时间遵循用户的时区

谢谢

【问题讨论】:

  • 您需要哪个时区??

标签: python django datetime


【解决方案1】:

在settings.py文件中请设置以下内容。

TIME_ZONE = 'America/Los_Angeles'
USE_TZ = False

【讨论】:

【解决方案2】:

是的,您需要保留USE_TZ = True

TIME_ZONE 设置只是您的应用程序的默认设置。

要允许用户更改他们的时区,您需要为他们提供在您的应用中执行此操作的功能。一旦他们更改了他们的时区,您就可以使用timezone.activate() 来激活他们的选择。

更多信息请参见this small example from the docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多