django的timezone.now没有显示正确的时间

imk*_*ost 47 django django-timezone

我的服务器在伦敦.

在我的settings.py身上:

TIME_ZONE = 'Europe/Moscow'
USE_TZ = True
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时:

from django.utils import timezone

print timezone.now().hour
Run Code Online (Sandbox Code Playgroud)

它打印伦敦的时间.我做错了什么?

更新:

>> timezone.now()
datetime.datetime(2013, 4, 16, 12, 28, 52, 797923, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)

tzinfo = <UTC>,也许它打印的不是伦敦时间,而是UTC的+0时间?无论如何,如何让django展示莫斯科时间?

另外,当我渲染模板时now = timezone.now().

{{ now.hour }} 打印,例如,12(伦敦时间)

{{ now|date:"G" }} 打印16(莫斯科时间)

Dan*_*per 75

请参阅Django文档"用法"部分中的问题#2 .

>>> from django.utils import timezone
>>> timezone.localtime(timezone.now())
Run Code Online (Sandbox Code Playgroud)

  • 有点晚了,但这应该有效:created = models.DateTimeField(default = lambda:timezone.localtime(timezone.now())) (8认同)
  • @jeverling自Django 1.7以来,最好不要在模型默认值中使用lambda(迁移不支持它).在这种情况下,您应该定义一个函数,然后将其作为可调用的函数传递[注意] [这里](http://stackoverflow.com/a/12654998) (3认同)
  • 我有一个疑问..在浏览了答案中的“使用链接”后,现在我觉得我应该使用默认的 TIME_ZONE 即。settings.py 中的 UTC。因此,我的模型在 auto_now_add 中的 DateTimeField 将使用 UTC 字段,即使在代码中我也应该使用 UTC 时间。仅对于模板中的渲染时间,我应该使用过滤器/标签将 UTC 转换为本地时间。我的想法是否正确,我不应该更改 settings.py 中的默认 TIME_ZONE 。请澄清我是否理解正确。 (2认同)