2011-06-20 294 views

回答

91

如果你想只比较日期,

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

或者说,很明显,

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

如果要检查他们相同日期。

The documentation通常是有帮助的。它通常也是python thing_i_have_a_question_about的第一个谷歌结果。除非你的问题是关于一个名为“蛇”的函数/模块。

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

  • date年,月,月的一天
  • time小时,分钟,秒,毫秒,时区信息
  • datetime结合日期和时间。它有方法date()time()以获得对应的datetime对象,并且有一个方便的combine函数可将datetime组合成一个datetime
23
  • 如果你需要比较月份中只有一天,而不是你可以使用下面的代码:如果您需要检查两个日期之间的差异是可以接受的,那么你可以使用

    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]]]]]]]) 

所以,你可以在天,秒,毫秒,分钟等取决于你真正需要检查DIFF:

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想要的行为。 – trutheality

+0

@trutheality - 是的,我在编辑问题之前就开始写我的答案,所以我无法理解他确切需要什么,这就是为什么我为此提供了几个选项。 –

+0

快速提示:datetime对象具有一个名为' (''''),并且timedelta对象有一个名为'days'(带有's')的属性,以防人们发现自己的语法不起作用。 –

2

您可以设置小时,分钟,秒和毫秒,无论你喜欢

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

但trutheality的答案很可能是最好的时候,他们都为零,你可以直接比较.date() S的时代

也许是快但如果你要比较数百日期时间的,因为你只需要执行一次replace() VS上百个电话给date()

+0

如果它不涉及突变,我会为此投票。然而,您可以通过创建您正在比较的日期时间对象的克隆来修改此方法,然后通过删除带有分日分辨率的字段来修改它们,然后比较这些副本。 – ninjagecko

+1

@ninja,它不会变异。 replace()返回一个新的datetime对象,就像str.replace()一样 –

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

每个人都应该比较使用.date(),但在我离开这个方法为例,以防有人想,例如,按月或按分钟比较的东西,等

相关问题