Ich verwende das Python- Datum / Uhrzeit- Modul, dh:
>>> import datetime
>>> today = datetime.datetime.now()
>>> print today
2009-03-06 13:24:58.857946
und ich möchte den Tag des Jahres berechnen, der für Schaltjahre empfindlich ist. Beispiel: Heute (6. März 2009) ist der 65. Tag des Jahres 2009. Hier ist der webbasierte DateTime-Rechner .
Wie auch immer, ich sehe zwei Möglichkeiten:
A. Erstellen Sie ein Array "number_of_days_in_month" = [31, 28, ...], entscheiden Sie, ob es sich um ein Schaltjahr handelt, und fassen Sie die Tage manuell zusammen.
B. Verwenden Sie datetime.timedelta
diese Option , um eine Vermutung anzustellen und anschließend binär nach dem richtigen Tag im Jahr zu suchen:
>>> import datetime
>>> YEAR = 2009
>>> DAY_OF_YEAR = 62
>>> d = datetime.date(YEAR, 1, 1) + datetime.timedelta(DAY_OF_YEAR - 1)
Diese beiden fühlen sich ziemlich klobig an und ich habe das Gefühl, dass es eine "pythonischere" Methode gibt, den Tag des Jahres zu berechnen. Irgendwelche Ideen / Vorschläge?
date.today()
eher verwendet alsdatetime.now()
funktioniert und die Art der Operation ein bisschen mehr betont.time.localtime().tm_yday
Es ist nicht erforderlich, eine Datums- / Uhrzeitangabe in ein Zeitplättchen umzuwandeln, da localtime () dies ergibt.Könnten Sie nicht verwenden
strftime
?Bearbeiten
Wie in den Kommentaren erwähnt, müssen Sie, wenn Sie Vergleiche oder Berechnungen mit dieser Nummer durchführen möchten, diese konvertieren,
int()
da siestrftime()
eine Zeichenfolge zurückgibt. In diesem Fall ist es besser, die Antwort von DzinX zu verwenden .quelle
Die Antwort von DZinX ist eine großartige Antwort auf die Frage. Ich habe diese Frage gefunden, als ich nach der Umkehrfunktion gesucht habe. Ich fand das funktioniert:
Ich bin mir der Etikette hier nicht sicher, aber ich dachte, ein Zeiger auf die Umkehrfunktion könnte für andere wie mich nützlich sein.
quelle
Ich möchte die Leistung verschiedener Ansätze unter Python 3.4, Linux x64 vorstellen. Auszug aus dem Zeilenprofiler:
Am effizientesten ist es also
quelle
Subtrahieren Sie einfach den 1. Januar vom Datum:
quelle
Wenn Sie Grund haben, die Verwendung des
datetime
Moduls zu vermeiden , funktionieren diese Funktionen.quelle
Dieser Code verwendet ein Datum als Eingabeargument und gibt den Tag des Jahres zurück.
quelle