2016-03-31 10 views
22

Mam liczbę całkowitą w tygodniu (0,1,2 ...) i muszę uzyskać nazwę dnia ("poniedziałek", "wtorek", ...).Uzyskaj nazwę dnia od dnia tygodnia int

Czy jest wbudowana funkcja Python lub sposób wykonania tej czynności?

Oto funkcja, którą napisałem, która działa, ale chciałem czegoś z wbudowanej biblioteki datetime.

def dayNameFromWeekday(weekday): 
    if weekday == 0: 
     return "Monday" 
    if weekday == 1: 
     return "Tuesday" 
    if weekday == 2: 
     return "Wednesday" 
    if weekday == 3: 
     return "Thursday" 
    if weekday == 4: 
     return "Friday" 
    if weekday == 5: 
     return "Saturday" 
    if weekday == 6: 
     return "Sunday" 
+0

Przechodzenie do dokumentacji jest zawsze pierwszym krokiem, jeśli chcesz użyć dateti ja metoda. Ale z mojego doświadczenia wynika, że ​​jeśli chcesz użyć metody datetime, musisz rozpocząć tworzenie obiektów datetime.datetime lub datetime.date, aby liczby całkowite w dni powszednie musiały zostać zmienione na obiekty typu datetime. – Dzhao

Odpowiedz

37

Jest bardziej pythonowy używać calendar module:

>>> import calendar 
>>> list(calendar.day_name) 
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] 

Albo można użyć typowych skrótów nazw dni:

>>> list(calendar.day_abbr) 
['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] 

Następnie indeksuj według własnego uznania:

>>> calendar.day_name[1] 
'Tuesday' 

(Jeśli poniedziałek jest pierwszym dniem tygodnia, użyj setfirstweekday go zmienić)

Korzystanie z modułu kalendarza ma tę zaletę, że lokalizacja świadomy:

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, 'de_DE') 
'de_DE' 
>>> list(calendar.day_name) 
['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag'] 
+0

Dobre wyjaśnienie. Nie wiedziałem o bibliotece Kalendarza. – GER

+0

Dziękujemy! Ta biblioteka wymaga lepszej dokumentacji. Musiałem zajrzeć do kodu, aby dowiedzieć się, że 'calendar.day_name' ma metodę' __getitem__', która wycina listę obiektów datetime reprezentujących tydzień ('calendar.day_name._days') i zwraca sformatowany ciąg reprezentujący nazwę dzień lub listę, jeśli przekazujesz plasterek. – dasdachs

0

To bardzo proste:

week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 
week[weekday] 
+0

To nie działa - OP chce dnia tygodnia '6' zwrócić' Sunday', ale to zwraca 'Saturday'. –

+0

@ OrangeFlash81 thx! teraz jest to łatwe, ponieważ nie ma żadnych przesunięć: D –

1

Można użyć listy, które można dostać pozycję od oparty na argumencie:

def dayNameFromWeekday(weekday): 
    days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 
    return days[weekday] 

Jeśli potrzebne funkcji, aby nie spowodować błąd, jeśli podałeś nieprawidłowy numer, na przykład "8", możesz sprawdzić, czy ten element listy istnieje, zanim go zwrócisz:

def dayNameFromWeekday(weekday): 
    days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 
    return days[weekday] if 0 < weekday < len(days) else None 

Funkcja ta może być używana jak można się spodziewać:

>>> dayNameFromWeekday(6) 
Sunday 
>>> print(dayNameFromWeekday(7)) 
None 

nie jestem pewien, że istnieje sposób, aby zrobić to wbudowany w datetime, ale nadal jest to bardzo skuteczny sposób.

+0

@zondo Dzięki, naprawiłem to. –

+0

Jeśli zrobisz to w ten sposób, a otrzymasz 0 (zero) w poniedziałek, zwróci on None, co może zakończyć się wyjątkiem. Musisz wykonać 'return days [weekday] jeśli -1

7

Używam moduł kalendarza:

import calendar 
calendar.day_name[0] 
'Monday' 
+1

Lepiej niż na stałe wpisywać nazwy do kodu.'calendar' działa również z' locale', więc nazwy dni automatycznie dostosują się, jeśli chcesz. – martineau

6

Jeśli potrzebujesz aby wydrukować nazwę dnia z obiektu datetime, można użyć następującej metody:

current_date = datetime.now 
current_date.strftime('%A') # will return "Wednesday" 
current_date.strftime('%a') # will return "Wed" 
Powiązane problemy