【问题标题】:Django model datetime - weird unix timestampDjango 模型 datetime - 奇怪的 unix 时间戳
【发布时间】:2018-03-27 14:30:12
【问题描述】:

我将日期时间存储在数据库 (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 就会出错?

【问题讨论】:

    标签: django timezone


    【解决方案1】:

    函数 mktime 采用当地时间,所以我假设您的计算机处于 UTC+1 时区(不考虑夏令时,由 mktime 考虑)。

    请参阅Python - calendar.timegm() vs. time.mktime(),了解如何使用 UTC (GMT) 时间“打发时间”。

    【讨论】:

      【解决方案2】:

      当你保存你的模型时,你使用 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

      我认为您的问题是您在模型中添加的内容。

      【讨论】:

      • 正如我所写,我的数据在数据库中是 100% 正常的。问题是当我计算 unix 时间戳时。
      猜你喜欢
      • 1970-01-01
      • 2010-12-18
      • 2010-11-19
      • 2018-01-04
      • 2011-12-10
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      相关资源
      最近更新 更多