Django DateTimeField 与 datetime.now() 的比较

6

我有一个 DateTimeField

class Assignment (models.Model):
   official_deadline = models.DateTimeField(null=True, blank=True)

我需要将其与当前日期时间进行比较,我已经尝试了:

def official_deadline_past(self):
    if datetime.datetime.today() > self.official_deadline:
        return True
    return False

但它总是返回False,我也尝试过:
def official_deadline_past(self):
    if datetime.datetime.now() > self.official_deadline:
        return True
    return False

但是我有相同的问题。

我有一个字段中的信息:2011-07-02 00:00:00,例如使用ModelForm生成的表单。


你发布的代码应该可以工作。你能添加更多细节吗?如果在该方法中打印/记录 self.official_deadline 的值,它的值是多少? - Alasdair
我同意Alasdair的观点 - 你需要检查比较返回的值。这时我喜欢使用Django shell。 - Ben Rosnick
当我询问assignment.official_deadline时,我得到了datetime.datetime(2011, 7, 2, 5, 0, tzinfo=<UTC>)。而当我询问assignment.official_deadline_past时,我得到了<Assignment: nom><bound method Assignment.official_deadline_past> - nlassaux
@Nico401,你找到这个问题的解决方案了吗?我也遇到了同样的问题,尝试筛选当前日期的对象。 - user956424
抱歉,这是很久以前的事了,我不记得这个问题的根源是什么了。我只有一个已删除的回答:“这是UTC的问题,我已经将其停用了...”。 - nlassaux
2个回答

0

我在Python 2.7.3和Django 1.3.1下遇到了类似的问题,比较DateTimeField和datetime时出现了错误。

我认为DateTimeField当时没有很好的时区支持,或者我没有正确配置它。

每当我为datetime字段指定时区时,所有DateTimeField与datetime的比较都会失败。

datetime使用本地中央时间,而DateTimeField输入为东部时间。

最终,我只能通过一个愚蠢的hack方法,在datetime中添加timedelta(hours=1)来“转换”为东部时间。


0

我有同样的问题,Django模型Datetime字段只包含日期(不包含时间)

now = datetime.datetime.now()

q1=Q()
q1.children.append(Q(datetimefieldFrom__lte=now))
q1.children.append(Q(datetimefieldTo__gte=now))

例如: 现在时间:"2020-12-11 17:17:58.000000" datetimeFrom:"2020-12-11 16:17:58.000000" datetimeTo:"2020-12-11 18:17:58.000000"

它只是传递“2020-12-11 00:00:00.000000”进行比较。

@johnjamesmiller,您的时区问题可以通过修改setting.py文件来解决。

TIME_ZONE = 'Asia/Hong_Kong'

USE_TZ = True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接