Ich versuche mit Python das Datum des Vormonats zu ermitteln. Folgendes habe ich versucht:
str( time.strftime('%Y') ) + str( int(time.strftime('%m'))-1 )
Dieser Weg ist jedoch aus zwei Gründen schlecht: Erstens wird 20122 für den Februar 2012 (anstelle von 201202) zurückgegeben, und zweitens wird im Januar 0 statt 12 zurückgegeben.
Ich habe dieses Problem in Bash mit gelöst
echo $(date -d"3 month ago" "+%G%m%d")
Ich denke, wenn bash eine eingebaute Methode für diesen Zweck hat, sollte Python, viel besser ausgestattet, etwas Besseres bieten, als das Schreiben eines eigenen Skripts zu erzwingen, um dieses Ziel zu erreichen. Natürlich könnte ich so etwas machen wie:
if int(time.strftime('%m')) == 1:
return '12'
else:
if int(time.strftime('%m')) < 10:
return '0'+str(time.strftime('%m')-1)
else:
return str(time.strftime('%m') -1)
Ich habe diesen Code nicht getestet und möchte ihn trotzdem nicht verwenden (es sei denn, ich finde keinen anderen Weg: /)
Danke für Ihre Hilfe!
Antworten:
datetime und die datetime.timedelta-Klassen sind dein Freund.
So was:
201202
wird gedruckt.quelle
.replace()
Methode verwenden:datetime.utcnow().replace(day=1) - timedelta(days=1)
.replace()
Funktion auch verketten . Tun Sie es einmal, um den letzten Monat zu erhalten, und wiederholen Sie es dann erneut, um den gewünschten Tag zu erhalten. Zuerst:d = date.today()
dannone_month_ago = (d.replace(day=1) - timedelta(days=1)).replace(day=d.day)
calendar
und verwendencalendar.mdays[d.month-1]
und mehr Hässlichkeit in einermin()
Funktionreplace
, aber sie scheint nicht pythonisch zu sein und berücksichtigt keine Eckfälle. Ich habe meine Antwort unten mittry - except
den Konten für alle Fälle aktualisiert , obwohl ich es hasse, Ausnahmen als Teil eines Algorithmus zu verwenden.Sie sollten Dateutil verwenden . Damit können Sie relativedelta verwenden, eine verbesserte Version von timedelta.
quelle
Oder:
quelle
Aufbauend auf der Antwort von bgporter .
quelle
Es ist sehr einfach und unkompliziert. Mach das
Hier ist die Ausgabe: $ python2.7 main.py
quelle
Für jemanden, der hierher gekommen ist und sowohl den ersten als auch den letzten Tag des Vormonats haben möchte:
Ausgabe:
quelle
Calendar
Modul an: stackabuse.com/introduction-to-the-python-calendar-modulequelle
Nur zum Spaß eine reine mathematische Antwort mit divmod. Aufgrund der Multiplikation ziemlich unzulänglich, könnte genauso gut eine einfache Überprüfung der Anzahl der Monate durchgeführt werden (wenn gleich 12, Jahr erhöhen usw.)
quelle
Mit dem Pendel sehr kompletten Bibliothek haben wir das
subtract
Verfahren (und nicht „subtrahieren“):Wir sehen, dass es Sprungjahre bewältigt.
Das umgekehrte Äquivalent ist
add
.https://pendulum.eustace.io/docs/#addition-and-subtraction
quelle
Aufbauend auf dem Kommentar von @JF Sebastian können Sie die
replace()
Funktion verketten, um einen "Monat" zurück zu gehen. Da ein Monat kein konstanter Zeitraum ist, versucht diese Lösung, zum gleichen Datum des Vormonats zurückzukehren, was natürlich nicht für alle Monate funktioniert. In diesem Fall wird standardmäßig der letzte Tag des Vormonats verwendet.Ausgabe:
quelle
Wenn Sie die ASCII-Buchstaben in einer EXE-Datei in einer LINUX / UNIX-Umgebung anzeigen möchten, versuchen Sie "od -c 'Dateiname' | more".
Sie werden wahrscheinlich viele nicht erkennbare Elemente erhalten, aber alle werden angezeigt, und die HEX-Darstellungen werden angezeigt, und die ASCII-äquivalenten Zeichen (falls zutreffend) folgen der Zeile der Hex-Codes. Probieren Sie es mit einem kompilierten Code aus, den Sie kennen. Sie könnten Dinge darin sehen, die Sie erkennen.
quelle
Es gibt eine Bibliothek auf hoher Ebene
dateparser
, die das vergangene Datum in natürlicher Sprache bestimmen und das entsprechende Python-datetime
Objekt zurückgeben kannquelle