【发布时间】:2016-10-06 12:35:36
【问题描述】:
在我维护的带有 postgresql 后端的 Django 应用程序中,用户登录并发布 cmets。每条评论都有一个与之关联的时间戳。
创建评论对象时,我会这样做:
now = datetime.now()
Comment.objects.create(commenter=self.request.user, when=now, text='text')
now 是时区感知的 - 即我是 UTC +530,now 正确编码该信息。如果我使用 psql 并查看在 Comment postgresql 表中创建的条目,我会看到 datetime 对象的正确值。
但是,如果我从 Django 应用程序访问同一个对象,并且 print 取出它的日期时间戳,我会看到一个时区 unaware 对象。 IE。一个不知道我在 UTC +530 的日期时间对象。
这完全打乱了我的逻辑。如何确保在 Django 应用程序中获得保存在其相关 postgresql 表中的相同日期时间对象?值得注意的是,这两个输出是不同的,我可能做错了什么。救命!
【问题讨论】:
-
datetime.now() 永远不会感知时区,这与 datetime.utcnow() 不同
-
@Apero:那么我通过
psql在表中看到时区感知值是否是postgresql 的一个怪癖?你觉得这里发生了什么?我正在尝试理解它。 -
我相信 postgres 确实将它存储在自己的时区中。 @Elwin Arens 提到的 django 设置 USE_TZ 在将它从 postgres 反序列化为 python 时将花费时间到 datetime 对象中。
标签: python django postgresql datetime