iCo*_*unk 9 datetime timestamp django-models
我在db中有一个字段timestamp = models.DateTimeField(auto_now_add = True).我想找到时间戳和datetime.now()之间的区别.
当我尝试datetime.now() - 时间戳时,我收到错误:
can't subtract offset-naive and offset-aware datetimes
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
Cia*_*ims 21
此错误指的是python存储时间的方式.根据python 文档:
日期和时间对象有两种:"天真"和"意识".这种区别是指对象是否具有时区,夏令时或其他类型的算法或政治时间调整的概念.
django 文档还指出:
禁用时区支持时,Django在本地时间使用天真的日期时间对象.这对于许多用例来说都很简单和充分.在这种模式下,要获得当前时间,您可以写:
import datetime
now = datetime.datetime.now()
Run Code Online (Sandbox Code Playgroud)
启用时区支持时,Django使用时区感知日期时间对象.如果您的代码创建了datetime对象,他们也应该知道.在此模式下,上面的示例变为:
import datetime
from django.utils.timezone import utc
now = datetime.datetime.utcnow().replace(tzinfo=utc)
Run Code Online (Sandbox Code Playgroud)
您应该确定是否需要在您的站点中识别时区,然后相应地调整存储时间.要将感知的dt转换为天真,您可以使用pytz模块并执行以下操作:
naive_dt = aware_dt.replace(tzinfo=None)
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为所有python日期时间都有一个可选的时区属性,tzinfo
可用于存储dt与UTC时间偏移量的信息.
归档时间: |
|
查看次数: |
7516 次 |
最近记录: |