查询正在从数据库获取UTC时间戳,但本地时间存储在数据库中

时间:2018-08-26 14:54:57

标签: django django-models

由于某种原因,我的查询集返回的是UTC时间,但是在数据库中,应该获取的时间是本地时间。有人知道为什么会这样吗?谢谢您的帮助

last_checkin_time方法是从数据库获取用户的最后签入时间戳记的方法,现在我只需将它发布在time_delta变量的toggle方法中,这样我就可以看到其获取的值。 (一旦我得到了这个时区的东西,就会知道time_delta将是实际的时间增量)

这里是我的模型经理

class UserActivityManager(models.Manager):

    def current(self, user):
        current_obj = self.get_queryset().filter(user=user).order_by('-timestamp').first()
        return current_obj

    def last_checkin_time(self, user):
        last_activity_time = self.get_queryset().order_by('-timestamp').filter(user=user, activity="checkin").first()
        return last_activity_time

    def toggle(self, user):
        last_item = self.current(user)
        activity = "checkin"
        time_delta = None
        last_checkin = self.last_checkin_time(user)
        if last_item is not None:
            if last_item.timestamp <= tz.localize(datetime.datetime.now()):
                pass
            if last_item.activity == "checkin":
                activity = "checkout"
                time_delta = last_checkin.timestamp

        obj = self.model(
                user=user,
                activity=activity,
                time_delta = time_delta,
        )
        obj.save()
        return obj

这就是我数据库中的表的样子(关注最后几行中的time_delta字段)

enter image description here

编辑:

我还要提到我模型中的timestamp字段设置为auto_now_add = True。 时间戳= models.DateTimeField(auto_now_add = True)

不确定这是否是导致问题的原因

1 个答案:

答案 0 :(得分:0)

我需要使用tz.normalize(last_checkin.timestamp),而不是使用tz.localize(last_checkin.timestamp)。似乎因为时间戳已经设置为UTC,所以我需要使用normalize方法而不是localize来更改它