2016-04-15 27 views
2

eine Zeichenfolge im datetime Format von strftime('%b %d, %Y %I:%M %p') zB Gegeben: 'Apr 17, 2016 02:00 AM'Datetime-Vergleich mit String?

ist es eine Möglichkeit, wenn diese Zeit schon Vergangenheit zu überprüfen? wie kann

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

irgendwie auf den String 'Apr 17, 2016 02:00 AM'

Antwort

7

Parse vergleichen Sie die Zeichenfolge in eine datetime.datetime Instanz dann 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)) 

Sie könnten, dass eine Funktion zu machen, wie:

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

Und dann rufen Sie wie folgt aus:

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

Nein, Vergleichsstring vergleichen werden hier nicht funktionieren würde; Die Werte werden nicht nach dem vollen Datum sortiert, sondern nach dem Monat und dem Tag des Monats, wobei die ersten zehn Tage des Monats in dieser Art verstreut sind, da die Tagesnummer nicht mit Null gefüllt ist. Wenn das Jahr zuerst aufgeführt wurde, gefolgt von einem Null gepolsterten numerischen Monat, Tag, Stunden (mit einer 24-Stunden-Uhr) und Minuten, dann könnten Sie es nur als Strings tun, weil dann die lexikographische Sortierung zufällig den Weg passt Datum und Uhrzeit werden sortiert.

Stattdessen analysieren Ihre Zeichenfolge in ein datetime Objekt mit dem datetime.datetime.strptime() class method:

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

Demo:

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

Wenn Sie waren Ihre Daten zu formatieren Sie die ISO8601 combined date-time format verwenden, dann würden Sie eine haben Format, das nur als Zeichenfolgen sortiert werden kann:

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