与字符串的日期时间比较?
问题描述:
给定一个串在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'