2016-05-11 7 views
1

Ich habe Strings im Format "% Y% m% d" (d. H. "20160511" für heute, 11. Mai 2016). Und müssen programmgesteuert (in Python) herausfinden, ob ein anderes Datum (sagen wir "20160504" oder "20160512") als Parameter an die Funktion der aktuellen Woche gesendet wird (aktuell ist heute die Woche, die am Sonntag, dem 2016 - nehmen wir an, es ist ein amerikanischer Weg der Woche, beginnend am Sonntag, dh der erste sollte False zurückgeben, der zweite - True).Was wäre der pythonische Weg herauszufinden, ob ein bestimmtes Datum zur aktuellen Woche gehört?

Alle Ideen, die mir einfielen, berechnen das Datum dieses Sonntags und vergleichen das als Parameter übergebene und dann, wenn der Tag in der Zukunft liegt, dass es nicht nach dem Samstag der aktuellen Woche ist , aber es sieht nicht elegant (oder "pythonisch") genug aus.

+0

haben Sie schaute auf die [ 'datetime'] (https://docs.python.org/2/library/datetime.html) Modul? – tom10

+1

Verwenden Sie 'datetime.datetime.today(). Wochentag()' und vergleichen Sie dann minus und plus das aktuelle Datum basierend auf '7' und sehen Sie, ob es innen ist. Python-weise wird dies wahrscheinlich etwas sein, was Sie einfach auf die 'date time'-Bibliothek erweitern können. Erstellen Sie Ihre eigenen Bibliothekserweiterungen ist genauso wie Pythonic als Verwendung von bestehenden :) –

+1

Wenn Sie bereits die Datumszeichenfolge für Sonntag haben, können Sie etwas tun wie 'return int (string_for_sunday) - int (date_string) im Bereich (7)' was gewährleistet dass die aktuelle Zeichenfolge innerhalb von 7 Tagen nach dem Sonntag liegt. Es wäre definitiv besser, einfach den eingebauten datetime-Datumsvergleich zu verwenden, wie @ User2910293 sagte. –

Antwort

5

können Sie die isodate Methode für Datetime-Objekte verwenden:

datetime.datetime.strptime('20160511','%Y%m%d').isocalendar()[1] 

Es wird die aktuelle Woche als eine ganze Zahl zurückgeben, so dass Sie zwei Daten vergleichen können, um zu sehen, ob sie Teil der gleichen Woche sind. Hier ist eine Funktion, die für zwei verschiedene Termine tun würde:

import datetime 

def same_week(date1, date2): 
    d1 = datetime.datetime.strptime(date1,'%Y%m%d') 
    d2 = datetime.datetime.strptime(date2,'%Y%m%d') 
    return d1.isocalendar()[1] == d2.isocalendar()[1] \ 
       and d1.year == d2.year 

Um den aktuellen Tag zu erhalten, verwenden datetime.datetime.today(). Also, um die obige Funktion Umschreiben genau das zu tun, was Sie fragen:

import datetime 

def same_week(dateString): 
    '''returns true if a dateString in %Y%m%d format is part of the current week''' 
    d1 = datetime.datetime.strptime(dateString,'%Y%m%d') 
    d2 = datetime.datetime.today() 
    return d1.isocalendar()[1] == d2.isocalendar()[1] \ 
       and d1.year == d2.year  
+0

Python-Fragen bekommen immer die schnellsten Antworten lol. +1 tho. Nettes Beispiel, kam nicht sofort zu mir. –

+0

datetime.strptime ('20160511', '% Y% m% d'). Isocalendar() [1] gibt zurück 19. Was mache ich damit? Was heißt das? – earlyadopter

+0

@ User2910293 danke :) Ya, wie jemand anders es "Vorsicht SO Ninjas" – rofls

Verwandte Themen