2017-09-05 35 views
5

Chcę wiedzieć, czy insertion_date jest starsza niż 30 dni. Powinno to wykryć do minuty i sekundy bieżącego czasu. Wartość w insertion_date będzie dynamicznie pobierana z interfejsu API.Sprawdź, czy data jest więcej niż 30 dni

Aktualny kod wykrywa tylko do dnia, potrzebuję dokładności aż do sekundy.

import datetime 
import dateutil.parser 

insertion_date = dateutil.parser.parse('2017-08-30 14:25:30') 
right_now_30_days_ago = datetime.datetime.today() - datetime.timedelta(days=30) 

print right_now_30_days_ago #2017-08-31 12:18:40.040594 
print insertion_date #2017-08-30 14:25:30 

if insertion_date > right_now_30_days_ago: 
    print "The insertion date is older than 30 days" 

else: 
    print "The insertion date is not older than 30 days" 
+0

zgodnie z dokumentacją, o timedelta jest * a czas trwania wyrażający różnicę między dwoma daty, czasu lub przypadkach datetime ** do mikrosekundy rozdzielczość ***. , więc masz coś nie tak –

+0

Franco, proszę o ponowne rozważenie swojej akceptacji. Ten użytkownik został przyłapany na plagiatowaniu treści przy wielu okazjach. Jestem prawie pewien, że ta odpowiedź została również w inny sposób plagiatowana z innej odpowiedzi. Kliknij ich profil i spójrz. –

Odpowiedz

5

trzeba coś zrobić na podobnej linii:

from datetime import datetime, timedelta 
time_between_insertion = datetime.now() - insertion_date 

if time_between_insertion.days>30: 
    print "The insertion date is older than 30 days" 

else: 
    print "The insertion date is not older than 30 days" 
3
from datetime import datetime, timedelta 

print(datetime.now()) 
datetime.datetime(2017, 9, 5, 7, 25, 37, 836117) 

print(datetime.now() - timedelta(days=30)) 
datetime.datetime(2017, 8, 6, 7, 25, 51, 723674) 

Jak widać tutaj, że jest on poprawny aż do sekundy.

Problem dotyczy datetime.today(). Należy użyć datetime.now() zamiast datetime.today():

time_since_insertion = datetime.now() - insertion_date 

if time_since_insertion.days > 30: 
    print("The insertion date is older than 30 days") 
else: 
    print("The insertion date is not older than 30 days") 

Nadzieję, że to pomaga!