2016-03-31 4 views
22

У меня есть целое число в будние дни (0,1,2 ...), и мне нужно получить имя дня («понедельник», «вторник», ...).Получить имя дня от буднего дня int

Есть ли встроенная функция Python или способ сделать это?

Вот функция, которую я написал, которая работает, но я хотел что-то из встроенной библиотеки 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

Переход к документам всегда является первым шагом, если вы хотите использовать dateti меня метод. Но по моему опыту, если вы хотите использовать метод datetime, вам нужно будет начать создавать объекты datetime.datetime или datetime.date, чтобы ваши целые числа дней недели должны были меняться на объекты datetime. – Dzhao

ответ

37

Это более Pythonic использовать calendar module:

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

Или, вы можете использовать общие Именины сокращения:

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

Затем укажите, что хотите:

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

(если понедельник не первый день недели, используйте setfirstweekday, чтобы изменить его)

Использование календаря модуль имеет преимущество в том, расположение известно:

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

Хорошее объяснение. Я не знал о библиотеке Календарь. – GER

+0

Спасибо! Эта библиотека нуждается в лучшей документации. Мне пришлось заглянуть в код, чтобы узнать, что 'calendar.day_name' является методом' __getitem__', который разрезает список с объектами datetime, представляющими неделю ('calendar.day_name._days'), и возвращает форматированную строку, обозначающую имя день или список, если вы перейдете в кусочек. – dasdachs

0

Это очень легко:

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

Это не сработает - OP хочет, чтобы день недели '6' возвращался' Sunday', но это возвращает 'Saturday'. –

+0

@ OrangeFlash81 thx! теперь это очень легко, так как никакого смещения: D –

1

Вы можете использовать список, который вы получаете деталь от основанный на ваших аргументов:

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

Если вам нужна функция, чтобы не вызвать если вы передали недопустимый номер, например «8», вы можете проверить, существует ли этот элемент списка до его возвращения:

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

Эта функция может быть использована, как и следовало ожидать:

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

Я не уверен, что есть способ сделать это встроенный в datetime, но это все еще очень эффективный способ.

+0

@zondo Спасибо, исправлено это. –

+0

Если вы сделаете это так, и вы получите 0 (ноль) в понедельник, он вернет None, что может закончиться в Исключении. Вам нужно сделать 'return days [weekday], если -1

7

Я использую календарь модуля:

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

Лучше, чем hardcoding daynames в ваш код.'calendar' также работает с' locale', поэтому имена дней будут автоматически настраиваться, если вы хотите. – martineau

6

Если вам нужно просто чтобы напечатать имя дня из объекта datetime, вы можете использовать следующее:

current_date = datetime.now 
current_date.strftime('%A') # will return "Wednesday" 
current_date.strftime('%a') # will return "Wed" 
Смежные вопросы