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
0
Neemaximo 18 Apr. 2018 im 03:08

3 Antworten

Beste Antwort

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
3
Ajax1234 18 Apr. 2018 im 02:13

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.

0
Jonas Byström 18 Apr. 2018 im 00:14

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
0
Bubble Bubble Bubble Gut 18 Apr. 2018 im 00:16