2017-09-20 2 views
-1

Ich habe Daten, die ich im folgenden Format formatiert und in Scheiben geschnitten haben:Python/Überprüfen Sie, ob das Datum in Scheiben ein Delta vom aktuellen Datum ist?

currentTime = datetime.now().strftime("%m-%d-%Y") 

die Termine wie diese gibt:

09-20-2017 

ich dieses Datum vergleichen wollen, oder besser gesagt die Timedelta einige Zeit zurück zu diesem Tag, lassen sie uns 7 Tage sagen, so wäre es:

09-13-2017 

Nun, mein Code sagt der folgende:

Im Idealfall möchte ich aktivieren, wenn die currentTime, von timedelta 7, ein früheres Datum war als die weitereSplit [0:10], die ein anderes Datum ist, das auf die gleiche Weise formatiert wurde, aber von einigen abgeschnitten wurde Textsegment, das das Datum und eine andere Zeichenfolge enthält. Wenn ich furtherSplit drucken waren [00.10], gibt es ein Datum wie folgt aus:

09-18-2017 

Wie würde ich dies funktioniert? Ich habe sichergestellt, dass Timedelta importiert wurde, und die einzelnen Daten ausgedruckt, um zu sehen, dass sie funktionieren. Wenn ich currentTime.timedelta (days = 7) tue, wird es jedoch nicht gedruckt.

EDIT

Auf Hilfe/Anfrage von Brad Solomon, hier ist eine aktualisierte Ausgabe:

Also, mit:

from dateutil.relativedelta import relativedelta 
... 
def compare_dates(date1, date2, **kwargs): 
    date1 = datetime.datetime.strptime(date1, '%m-%d-%Y') 
    date2 = datetime.datetime.strptime(date2, '%m-%d-%Y') 
    td = relativedelta(**kwargs) 
    return date1 - td < date2 
... 
if compare_dates(currentTime, furtherSplit[0:10], days=7): 
        someList.append(x) 
        print ("get here") 

Es ist nie druckt oder fügt die ‚x zu einer Liste. Alles, was benutzt wird, ist gültig. Bitte beraten!

Antwort

2

Verwenden Sie relativedelta aus dem dateutil Modul.

from datetime import datetime 
from dateutil.relativedelta import relativedelta 

def compare_dates(date1, date2, **kwargs): 
    date1 = datetime.strptime(date1, '%m-%d-%Y') 
    date2 = datetime.strptime(date2, '%m-%d-%Y') 
    td = relativedelta(**kwargs) 
    return date1 - td < date2 

d1 = datetime.now().strftime('%m-%d-%Y') 
d2 = '09-18-2017' 

print(compare_dates(d1, d2, days=7)) 
True 

Binden Sie zurück zu Ihrem konkretes Beispiel: die Funktion sagt, vergleichen (date1 minus einige Timedelta) bis (date2). In Ihrem Beispiel ist date1 heute und date1 ist der 18. September. Die Funktion verwendet String-Form-Datumsangaben anstelle von Datetime-Objekten als Eingaben.

Ich habe **kwargs verwendet, damit Sie jedes Schlüsselwortargument übergeben können, das Sie möchten relativedelta. Zum Beispiel könnten Sie auch weeks=2 angeben.

+0

'09-13-2017' ist der String von' foreverSplit [0:10] '. Es kommt von einer Zeile direkt darüber, die 'someContent.split ('\ n ---- \ n') [3]' die ich weiß, gültig ist, weil das Datum, an dem ich diesen Kommentar gestartet habe, unmittelbar danach zu Testzwecken gedruckt wird . Ich werde versuchen, neu zu starten. –

Verwandte Themen