2016-04-15 73 views
2

給定一個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'

回答

7

解析字符串轉換爲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 
5

沒有,字符串比較不會在這裏工作;值不根據全日期進行排序,但根據月份的月份和日期,在該月的前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'