我在PostgreSQL中有一个时区感知的timestamptz
字段。当我从表中提取数据时,我想现在就减去时间,这样我就可以得到它的年龄。
我遇到的问题是datetime.datetime.now()
和datetime.datetime.utcnow()
似乎都返回了不知道时区的时间戳,这导致我得到这个错误:
TypeError: can't subtract offset-naive and offset-aware datetimes
是否有办法避免这种情况(最好不要使用第三方模块)。
编辑:谢谢你的建议,但是试图调整时区似乎给了我错误。。所以我将在PG中使用不知道时区的时间戳,并始终使用:
NOW() AT TIME ZONE 'UTC'
这样我所有的时间戳在默认情况下都是UTC(尽管这样做更烦人)。
你试过删除时区感知吗?
来自http://pytz.sourceforge.net/
可能还需要添加时区转换。
编辑:请注意这个答案的年龄。下面是Python3的答案。
正确的解决方案是添加时区信息,例如,在Python 3中获取当前时间作为一个感知的datetime对象:
在较旧的Python版本上,您可以自己定义
utc
tzinfo对象(来自datetime文档的示例):然后:
我知道有些人特别使用Django作为接口来抽象这种数据库交互。Django提供了可用于此目的的实用程序:
您确实需要设置一个基本的Django设置基础结构,即使您只是使用这种类型的接口(在设置中,您需要包含
USE_TZ=True
以获得一个感知的日期时间)。就其本身而言,这可能远远不足以激励您使用Django作为一个界面,但还有许多其他好处。另一方面,如果你在这里绊倒是因为你弄坏了你的Django应用程序(就像我一样),那么也许这会有帮助。。。
相关问题 更多 >
编程相关推荐