如何检查日期是否与datetime.today()在同一天?


88

True即使是同一天,此条件也总是计算为,因为它正在比较时间。

from datetime import datetime

# ...

if date_num_posts < datetime.today(): 

如何检查日期是否与同一天datetime.today()

Answers:


169

如果您只想比较日期,

yourdatetime.date() < datetime.today().date()

或者,显然

yourdatetime.date() == datetime.today().date()

如果要检查它们是同一日期。

该文档通常很有帮助。通常,它也是的第一个Google搜索结果python thing_i_have_a_question_about。除非您的问题与名为“ snake”的功能/模块有关。

基本上,datetime模块具有三种存储时间点的类型:

  • date 年,月,日
  • time 时,分,秒,微秒,时区信息
  • datetime结合日期和时间。它具有方法date()time()获取对应的datetime对象的功能,并且有一个方便的combine函数可以将组合datetimedatetime

2
“它通常也是python Thing_i_have_a_question_about的第一个Google搜索结果”,除非有人对此主题进行过SO录入,例如它在这里发生的事情:)
减少活动

37
  • 如果只需要比较一个月中的某天的值,则可以使用以下代码:

    if yourdate.day == datetime.today().day:
        # do something
    
  • 如果需要检查两个日期之间的差异是否可以接受,则可以使用 timedelta

    if (datetime.today() - yourdate).days == 0:
        #do something
    
  • 如果只想比较日期部分,则可以简单地使用:

    from datetime import datetime, date
    if yourdatetime.date() < datetime.today().date()
        # do something
    

请注意,timedelta具有以下格式:

datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

因此,您可以根据天,秒,毫秒,分钟等来检查差异,具体取决于您的实际需求:

from datetime import datetime
if (datetime.today() - yourdate).days == 0:
    #do something

在您需要检查两个日期是否完全相同的情况下,可以使用timedelta(0):

from datetime import datetime, timedelta
if (datetime.today() - yourdate) == timedelta(0):
    #do something

1
.day是每月的一天。因此,使用您的第一个代码段,“ 8月12日”等于“ 12月12日”。这可能不是OP想要的行为。
真实性2011年

@trutheality-是的,在开始编辑问题之前,我开始写我的答案,因此我无法理解他的确切需求,这就是为什么我为此提供了几种选择
Artsiom Rudzenka 2011年

1
快速说明:datetime对象的属性为“ day”(否),timedelta对象的属性为“ days”(带有“ s”),以防人们迷惑其语法为何不起作用。
科尔顿·希克斯

3

您可以将小时,分钟,秒和微秒设置为任意值

datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)

但是,当它们全部为零时,真实性的答案可能是最好的,您可以比较.date()时代

但是,如果您必须比较数百个日期时间,则可能会更快,因为您只需要执行replace()一次,而数百次调用date()


如果不涉及突变,我将为此投票。但是,您可以通过创建要比较的日期时间对象的克隆,然后通过删除具有亚日期分辨率的字段来修改它们,然后比较副本来修改此方法。
ninjagecko 2011年

1
@ninja,它不会变异。replace()返回一个新的日期时间对象,如str.replace()一样
John La Rooy

2
all(getattr(someTime,x)==getattr(today(),x) for x in ['year','month','day'])

人们应该使用进行比较.date(),但是如果有人想要按月或按分钟等进行比较,我就以这种方法为例。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.