与字符串的日期时间比较?

问题描述:

给定一个strftime('%b %d, %Y %I:%M %p') 如的datetime格式:'Apr 17, 2016 02:00 AM'与字符串的日期时间比较?

是有没有办法来检查,如果这个时间已过去? 等可比较

datetime.datetime.now().strftime('%b %d, %Y %I:%M %p') 

莫名其妙字符串'Apr 17, 2016 02:00 AM'

解析字符串转换为datetime.datetime实例,然后比较datetime.now()

from datetime import datetime 

dt = datetime.strptime('Apr 17, 2016 02:00 AM', '%b %d, %Y %I:%M %p') 
if dt < datetime.now(): 
    print('{} alread past'.format(dt)) 

你可能想使之成为功能:

def is_past(dt_string): 
    return datetime.strptime(dt_string, '%b %d, %Y %I:%M %p') < datetime.now() 

然后调用它像这样:

>>> is_past('Apr 17, 2016 02:00 AM') 
False 
>>> is_past('Apr 01, 2016 02:00 AM') 
True 

没有,字符串比较不会在这里工作;值不根据全日期进行排序,但根据月份的月份和日期,在该月的前10天内无情地分散在整个日期中,因为日期编号不是零填充的。如果首先列出年份,然后是零填充数字月份,日期,小时数(使用24小时制)和分钟,然后然后您可以仅将它作为字符串来使用,因为这样字典式的排序恰好符合方式日期和时间将被排序。

dt = datetime.datetime.strptime(string, '%b %d, %Y %I:%M %p') 
if dt < datetime.datetime.now(): 
    # in the past. 

演示:

相反,使用datetime.datetime.strptime() class method解析你的字符串为datetime对象

>>> import datetime 
>>> string = 'Apr 17, 2016 02:00 AM' 
>>> dt = datetime.datetime.strptime(string, '%b %d, %Y %I:%M %p') 
>>> dt 
datetime.datetime(2016, 4, 17, 2, 0) 
>>> dt < datetime.datetime.now() 
False 

如果你要使用ISO8601 combined date-time format您的日期格式,那么你就会有一个格式,只能按字符串排序:

>>> datetime.datetime.now().isoformat() 
'2016-04-15T09:55:09.907130'