Code ist unten, ich versuche einfach, 2 Daten zu subtrahieren und herauszufinden, ob die Datumsdifferenz einen bestimmten Schwellenwert erreicht. Ich kann nicht herausfinden, wie ich sie in das richtige Format dafür bringen kann.
def activity_breakup():
now = datetime.date.today().strftime('%Y-%m-%d %H:%M:%S')
print("now is equal to {}".format(now))
for activity in convert_csv_to_list()[1:]:
date = datetime.datetime.strptime(activity[2], '%m/%d/%Y')
print("date is equal to {}".format(date))
if now - date == 0:
activities_in_next_7_days.append(activity)
elif now - date <= 7:
activities_today.append(activity)
else:
continue
Ausgabe der Drucke sind:
now is equal to 2018-04-17 00:00:00
date is equal to 2018-04-22 00:00:00
3 Antworten
strftime
gibt ein String-Objekt zurück (denken Sie: String aus Zeit).
strptime
gibt ein Datumsobjekt zurück (denken Sie an: string parse time).
Wenn Sie sich Ihren Code ansehen, ist now
eine Zeichenfolge und date
ein Datumsobjekt. Der Fehler zeigt dies ebenfalls an.
Wenn Sie Daten vergleichen möchten, ändern Sie den Typ von now
.
def activity_breakup():
now = datetime.date.today()
print("now is equal to {}".format(now.strftime('%Y-%m-%d %H:%M:%S')))
for activity in convert_csv_to_list()[1:]:
date = datetime.datetime.strptime(activity[2], '%m/%d/%Y')
print("date is equal to {}".format(date))
if now - date == 0:
activities_in_next_7_days.append(activity)
elif now - date <= 7:
activities_today.append(activity)
else:
continue
In einem anderen Zusammenhang soll now - date
vielleicht die Anzahl der Tage zurückgeben? Derzeit wird ein datetime.timedelta
Objekt zurückgegeben. Sie können Folgendes tun:
days_diff = (now - date).days
if days_diff == 0:
activities_in_next_7_days.append(activity)
elif days_diff <= 7:
activities_today.append(activity)
else:
continue
Versuchen Sie, in Ihrer ersten Anweisung ein datetime-Objekt anstelle einer Zeichenfolge zu verwenden:
from datetime import datetime
now = datetime.today()
Der letzte Teil Ihrer entsprechenden Zeile besteht lediglich darin, sie in eine Zeichenfolge mit einem bestimmten Format zu konvertieren.
stftime
gibt eine Zeichenfolge zurück, während strptime
ein datetime
Objekt zurückgibt. Verschieben Sie einfach das strftime
in die Zeichenfolgenformatierung.
def activity_breakup():
# now is a datetime now
now = datetime.date.today()
print("now is equal to {}".format(now.strftime('%Y-%m-%d %H:%M:%S')))
for activity in convert_csv_to_list()[1:]:
date = datetime.datetime.strptime(activity[2], '%m/%d/%Y')
print("date is equal to {}".format(date))
if now - date == 0:
activities_in_next_7_days.append(activity)
elif now - date <= 7:
activities_today.append(activity)
else:
continue
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.