Wie kann man mit Python herausfinden, welche Wochennummer das aktuelle Jahr am 16. Juni (wk24) ist?
python
datetime
week-number
Gerry
quelle
quelle
strftime("%U", d)
von der abweichen kannisocalendar()
. Wenn Sie beispielsweise das Jahr auf 2004 ändern, erhalten Sie Woche 24 mitstrftime()
und Woche 25 mitisocalendar()
.Antworten:
datetime.date
hat eineisocalendar()
Methode, die ein Tupel zurückgibt, das die Kalenderwoche enthält:datetime.date.isocalendar () ist eine Instanzmethode, die ein Tupel zurückgibt, das Jahr, Wochennummer und Wochentag in der jeweiligen Reihenfolge für die angegebene Datumsinstanz enthält.
quelle
[1]
' erklären oder einen Zeiger geben würden, wo Sie nach Informationen suchen sollen.date(2010, 1, 1).isocalendar()[1]
kehrt zurück53
. Aus den Dokumenten: "Zum Beispiel beginnt 2004 an einem Donnerstag, also beginnt die erste Woche des ISO-Jahres 2004 am Montag, dem 29. Dezember 2003 und endet am Sonntag, dem 4. Januar 2004, so dassdate(2003, 12, 29).isocalendar() == (2004, 1, 1)
unddate(2004, 1, 4).isocalendar() == (2004, 1, 7)
."isocalendar()
ist großartig, aber sei sicher, dass es das ist, was du willst. Heute ist ein perfektes Beispiel. 01/01/2016 ist gleich(2015, 53, 5)
.now.strftime("%W")
undnow.strftime("%U")
sind gleich,00
was oft gewünscht wird. STRFTIME BeispieleSie können die Wochennummer direkt von datetime als Zeichenfolge abrufen.
Sie können auch verschiedene "Typen" der Wochennummer des Jahres erhalten, indem Sie den
strftime
Parameter ändern für:Ich habe es von hier herausgefunden . Es hat bei mir in Python 2.7.6 funktioniert
quelle
Invalid format string
zu diesem Muster. Ihre Dokumente erwähnen auch%V
nicht.%G-%V
anstelle von "<JAHR> - <ISOWEEK>" - Darstellung Ihrer Daten verwenden, anstatt%Y-%V
.%G
ist das ISO-%Y
Ich glaube
date.isocalendar()
, das wird die Antwort sein. Dieser Artikel erklärt die Mathematik hinter dem ISO 8601-Kalender. Überprüfen Sie den Abschnitt date.isocalendar () auf der datetime-Seite der Python-Dokumentation..isocalendar () gibt ein 3-Tupel mit (Jahr, Woche, Woche) zurück.
dt.isocalendar()[0]
Gibt das Jahr zurück,dt.isocalendar()[1]
gibt die Wochennummer zurück,dt.isocalendar()[2]
gibt den Wochentag zurück. So einfach wie möglich.quelle
Hier ist eine weitere Option:
welche druckt
24
.Siehe: http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior
quelle
Die von anderen vorgeschlagene ISO-Woche ist gut, entspricht aber möglicherweise nicht Ihren Anforderungen. Es wird davon ausgegangen, dass jede Woche mit einem Montag beginnt, was zu Beginn und Ende des Jahres zu einigen interessanten Anomalien führt.
Wenn Sie lieber eine Definition verwenden möchten, die besagt, dass Woche 1 unabhängig vom Wochentag immer der 1. bis 7. Januar ist, verwenden Sie eine Ableitung wie folgt:
quelle
Im Allgemeinen, um die aktuelle Wochennummer zu erhalten (ab Sonntag):
quelle
Für den ganzzahligen Wert der momentanen Woche des Jahres versuchen Sie:
quelle
Es gibt viele Systeme zur Wochennummerierung . Die folgenden Systeme werden am häufigsten mit Codebeispielen verwendet:
ISO : Die erste Woche beginnt mit Montag und muss den 4. Januar enthalten. Der ISO-Kalender ist bereits in Python implementiert:
Nordamerika : Die erste Woche beginnt mit dem Sonntag und muss den 1. Januar enthalten. Der folgende Code ist meine modifizierte Version der ISO-Kalenderimplementierung von Python für das nordamerikanische System:
quelle
Wenn Sie nur die Isocalendar-Wochennummer auf der ganzen Linie verwenden, sollte Folgendes ausreichen:
Dadurch wird das zweite Mitglied des von isocalendar zurückgegebenen Tupels für unsere Wochennummer abgerufen.
Wenn Sie jedoch Datumsfunktionen verwenden, die im Gregorianischen Kalender behandelt werden, funktioniert der Isokalender allein nicht! Nehmen Sie das folgende Beispiel:
Die Zeichenfolge hier sagt, dass der Montag der ersten Woche im Jahr 2014 als unser Datum zurückgegeben werden soll. Wenn wir hier isocalendar verwenden, um die Wochennummer abzurufen, würden wir erwarten, dass wir dieselbe Wochennummer zurückerhalten, aber wir tun es nicht. Stattdessen erhalten wir eine Wochennummer von 2. Warum?
Woche 1 im Gregorianischen Kalender ist die erste Woche mit einem Montag. Woche 1 im Isokalender ist die erste Woche mit einem Donnerstag. Die Teilwoche zu Beginn des Jahres 2014 enthält einen Donnerstag. Dies ist also Woche 1 im Isokalender und
date
Woche 2.Wenn wir die Gregorianische Woche haben wollen, müssen wir vom Isokalender zum Gregorianischen konvertieren. Hier ist eine einfache Funktion, die den Trick macht.
quelle
Sie können die% W-Direktive wie folgt ausprobieren:
'% W': Wochennummer des Jahres (Montag als erster Wochentag) als Dezimalzahl. Alle Tage in einem neuen Jahr vor dem ersten Montag gelten als Woche 0. (00, 01, ..., 53)
quelle
isocalendar () gibt für einige Daten falsche Jahres- und Wochennummernwerte zurück:
Vergleichen Sie mit Mark Ransoms Ansatz:
quelle
Ich fasse die Diskussion in zwei Schritten zusammen:
datetime
Objekt.datetime
Objekts oder einesdate
Objekts, um die Wochennummer zu berechnen.Sich warm laufen
`` `Python
`` `
1. Schritt
Um ein
datetime
Objekt manuell zu generieren , können wirdatetime.datetime(2017,5,3)
oder verwendendatetime.datetime.now()
.In der Realität müssen wir jedoch normalerweise eine vorhandene Zeichenfolge analysieren. Wir können
strptime
Funktionen verwenden,datetime.strptime('2017-5-3','%Y-%m-%d')
in denen Sie das Format angeben müssen. Einzelheiten zu verschiedenen Formatcodes finden Sie in der offiziellen Dokumentation .Alternativ ist es bequemer, das Dateparse- Modul zu verwenden. Beispiele sind
dateparser.parse('16 Jun 2010')
,dateparser.parse('12/2/12')
oderdateparser.parse('2017-5-3')
Die beiden oben genannten Ansätze geben ein
datetime
Objekt zurück.2. Schritt
Verwenden Sie das erhaltene
datetime
Objekt zum Aufrufenstrptime(format)
. Zum Beispiel,`` `Python
`` `
Es ist sehr schwierig zu entscheiden, welches Format verwendet werden soll. Ein besserer Weg ist es, ein
date
Objekt zum Aufrufen zu bringenisocalendar()
. Zum Beispiel,`` `Python
`` `
In der Realität werden Sie eher
date.isocalendar()
einen wöchentlichen Bericht erstellen, insbesondere in der Einkaufssaison "Weihnachten-Neujahr".quelle
quelle
Es wurden viele Antworten gegeben, aber ich würde sie gerne ergänzen.
Wenn Sie die Woche als Jahr / Woche-Stil anzeigen möchten (z. B. 1953 - Woche 53 von 2019, 2001 - Woche 1 von 2020 usw.), können Sie dies tun:
Es wird das aktuelle Jahr und die aktuelle Woche dauern, und long_week_num am Tag des Schreibens wird dies sein:
quelle
date()
von Grund auf neu erstellen ?datetime.datetime()
Instanzen haben eine.date()
Methode für diesen Job.