Django模型日期时间 - 奇怪的unix时间戳

时间:2018-03-27 14:30:13

标签: django timezone

我将日期时间存储在数据库中(SQLite)。我在模型中保存了带有UTC时区的python datetime对象(所以他们都知道)。当我检查数据库时,我真的看到2018-02-28 00:00:00。 当我从数据库中获取数据时,我看到:

>>> Price.objects.last().datetime.timetuple()
time.struct_time(tm_year=2018, tm_mon=2, tm_mday=28, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=59, tm_isdst=0)

到目前为止一直很好(时间真的是午夜)。但是,一旦我尝试划分UNIX时间戳,我得到错误的结果:

>>> time.mktime(Price.objects.last().datetime.timetuple()) / 3600 / 24
17589.958333333332

当我用+1小时调整时间戳时,它终于正确了。

>>> (time.mktime(Price.objects.last().datetime.timetuple()) + 3600) / 3600 / 24
17590.0

我做错了什么?为什么struct_time显示小时= 0和分钟= 0但是一旦我调用time.mktime就出错了?

2 个答案:

答案 0 :(得分:0)

函数mktime在当地时间占用时间,因此我假设您的计算机处于UTC + 1时区(不考虑夏令时,mktime考虑)。

请参阅Python - calendar.timegm() vs. time.mktime()了解如何制作时间"与UTC(GMT)时间。

答案 1 :(得分:0)

保存模型时,是否使用django timezone类?

from django.utils import timezone now = timezone.now()

并输入settings.py

USE_TZ=True

来源:https://docs.djangoproject.com/fr/2.0/topics/i18n/timezones/#naive-and-aware-datetime-objects

我认为你的问题就是你在模型中的问题。