2016-03-31 17 views
22

私は平日の整数(0,1,2 ...)を持ち、曜日名( 'Monday'、 'Tuesday'、...)を取得する必要があります。平日の日付から曜日名を取得

これにはPythonの機能が組み込まれていますか?

ここには私が書いた機能がありますが、私はdatetime libに組み込まれたものから何かを求めていました。

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

calendar moduleを使用するのがよりPython的である:

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

それとも、あなたは一般的な曜日名の省略形を使用することができます。

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

希望するインデックス:

カレンダーモジュールを使用して10
>>> 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'は週を表すdatetimeオブジェクトでリストをスライスし(' calendar.day_name._days')、名前を表す整形された文字列を返す '__getitem__'メソッドを持っていることを知るためにコードを調べなければなりませんでしたあなたがスライスを渡すならば、その日またはリスト。 – dasdachs

0

それは非常に簡単です:あなたが機能を必要に応じて

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

が発生しないために:

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

これはうまくいきません - OPは平日に '6 'を返して「Sunday」を返しますが、これは' Saturday'を返します。 –

+0

@ OrangeFlash81 thx!今ではオフセットがないのでずっと簡単です:D –

1

あなたは、あなたの引数に基づいてから項目を取得し、リストを使用することができますあなたが無効な番号、例えば "8"を渡した場合、あなたがそれを返す前にリストのその項目が存在するかどうかを確認することができます:

01あなたが期待するよう

この機能を使用することができます。

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

私はdatetimeに組み込まれてこれを行う方法がありますわからないんだけど、これはまだ非常に効率的な方法です。

+0

@ zondoありがとう、それを修正しました。 –

+0

このようにして月曜日が0(ゼロ)になると、Noneが返され、例外に終わる可能性があります。 ''月曜日 ''を返すためには、-1 <平日<曜日(日)else None'の場合は' return days [平日]を実行する必要があります。 –

7

私はカレンダーモジュールを使用している:

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

コードに曜日の名前をハードコードするよりも優れています。'calendar'は' locale'でも使えますので、あなたが望むならば、曜日名が自動的に調整されます。 – martineau

6

あなたが必要な場合datetimeオブジェクトから曜日名を出力するだけで、次のように使用できます。

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