【问题标题】:Detecting if set time has elapsed since date in Django model检测自Django模型中的日期以来设置的时间是否已经过去
【发布时间】:2012-12-28 09:52:17
【问题描述】:

这段代码一直给我错误。我的 Django 模型中有一个名为 invite_sent 的字段(日期时间),同一模型中有另一个名为 check_time 的字段检查时间是在 invite sent 之后应该发生特定操作的时间量。由于某种原因,我的代码无法正常工作。

models.py

class Game(models.Model):
    title = models.CharField(max_length=50)
    summery = models.CharField(max_length=500)
    pin = models.CharField(max_length=12)
    key = models.CharField(max_length=12)
    complete = models.BooleanField()
    invite_sent = models.DateTimeField() #<-----------
    check_time = models.IntegerField() #<-----------
    on = models.ForeignKey("Member", related_name="turn", blank=True,  null=True)

views.py

def check_time():
    games = Game.objects.filter(complete = False)
    for g in games:
        hours = (datetime.datetime - g.invite_sent)/60/60 # trying to get hours between now and then
        if not hours > g.check_time: #stuff beyond this is not really important to the issue
            continue
        send_overtime(g)
        set_on(g)
        send_invite(g)

【问题讨论】:

    标签: python django datetime models


    【解决方案1】:

    你在这行有问题hours = (datetime.datetime - g.invite_sent)/60/60

    • 你应该使用datetime.datetime.now()而不是datetime.datetime(它是一个你必须调用.now()的模块对象)
    • 减去两个 datetime 对象得到一个 timedelta 对象,该对象有一个方法 .total_seconds() 使用它来转换为小时

    所以错误的代码行应该是:

    hours = (datetime.datetime.now() - g.invite_sent.replace(tzinfo=None)).total_seconds() / 60 / 60
    

    【讨论】:

    • 谢谢,但现在我收到此错误can't subtract offset-naive and offset-aware datetimes
    • ok django 它返回的offset-aware datetimes 是时区感知的,时区信息对您来说很重要吗?请回答,以便我可以相应地更新解决方案
    • 时区并不重要。事实上,它实际上对程序的运行方式是有害的。 (所以它不应该是时区感知的)
    • 我已经更新了我的答案。如果您不希望 django 提供时区感知日期时间,那么您应该在设置文件中设置 USE_TZ = False
    • 清除表中的数据,重新开始。因为旧数据是时区感知的,所以 .replace(tzinfo=None) 只会禁用时区信息,不要忘记在设置文件中更改 USE_TZ = False
    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多