Ich habe einen Code geschrieben, um Anfragen an eine API zu senden. Die API ermöglicht die Suche zwischen einem bestimmten Datumssatz. Mein Code nimmt ein Datetime-Objekt und erhöht dieses Objekt um ein Timedelta, lasst uns dieses Timedelta aufrufen. Ich habe ein zweites Datetime-Objekt, das die by d-1 inkrementiert. Die Idee ist, nicht überlappende Zeiträume zu erhalten. Alles scheint gut zu funktionieren, außer wenn sich das Datum von November bis zum 31. Oktober ändert, ist der Monat, der zu meiner Datumszeit zurückkehrt, falsch. Hier ist der Code:timedelta gibt falschen Monat zurück
start_date=datetime(2013,9,22)
end_date=datetime(2013,12,1)
d = start_date
delta = timedelta(days=10)
while d <= end_date:
ys=d.strftime('%Y')
ms=d.strftime('%m')
ds=d.strftime('%d')
d += delta
ye=d.strftime('%Y')
me=d.strftime('%m')
de=(d-timedelta(days=1)).strftime('%d')
print ys+'-'+ms+'-'+ds+'..'+ye+'-'+me+'-'+de
Und hier ist die Ausgabe: 2013-09-22..2013-10-01
2013-10-02..2013-10-11
2013-10-12..2013-10-21
2013-10-22..2013-11-31 #the second date printed should be 2013-10-31
2013-11-01..2013-11-10
2013-11-11..2013-11-20
2013-11-21..2013-12-30
2013-12-01..2013-12-10
Jede Idee, warum dies geschieht?
Probieren Sie die * freeze_gun * Bibliothek für Unit-Tests verwenden, so dass Sie debuggen können. Ermöglicht es Ihnen, das aktuelle Datum/die aktuelle Uhrzeit einfach nachzuahmen – Maximas
Sie berechnen den Monat für den ersten Tag des nächsten Abschnitts, aber den Tag, indem Sie eins subtrahieren. versuche mit 'final_day = d-timedelta (Tage = 1); ye = final_day.strftime ("% Y") ... usw. –
Ja, Sie haben Recht, ich sehe meinen Fehler jetzt, nachdem ich einen Tag die ganze Zeit Objektänderung subtrahieren, aber der Monat und das Jahr zuvor als String nicht definiert. – asado23