在Django app

时间:2016-06-06 19:20:41

标签: python django postgresql datetime

在我维护的带有postgresql后端的Django应用程序中,用户登录并发表评论。每条评论都有一个与之相关的时间戳。

创建评论对象时,我会这样做:

now = datetime.now()
Comment.objects.create(commenter=self.request.user, when=now, text='text')

now是时区感知的 - 即我是UTC +530,now正确编码该信息。如果我使用psql并查看在post postgresql表中创建的条目,我会看到datetime对象的正确值。

但是,如果我从Django应用程序访问此同一对象,并print输出其日期时间戳,我会看到一个时区不知道对象。即一个日期时间对象,不知道我是UTC +530。

这完全搞砸了我的逻辑。我如何确保在Django应用程序中获取相同的dateg对象,该对象保存在相关的postgresql表中?值得注意的是,两个输出是不同的,我可能做了一些根本错误的事情。救命啊!

1 个答案:

答案 0 :(得分:1)

使用timezone.now()代替datetime.now():

from django.utils import timezone
timezone.now()

为整个应用程序(包括PostgreSQL架构更新)全局或不带时区获取now()。有或没有时区取决于USE_TZ设置。