Django模型DateTime-怪异的Unix时间戳



i将数据库存储在数据库(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,它就出错了?

函数MKTime在当地时间需要时间,因此我认为您的计算机在UTC 1个时区(不考虑夏季时间,MKTime考虑了(。

请参阅python -calendar.timegm((与time.mktime((有关如何使用UTC(GMT(times进行"时间"。

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

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

我认为您的问题是您在模型中放置的。

最新更新