私はISO 8601の年と週の番号を持っています。これをその週の最初の日の日付(月曜日)に変換する必要があります。これどうやってするの?
datetime.strptime() は%W
ディレクティブと%U
ディレクティブの両方を取りますが、ISO 8601の平日ルール datetime.isocalendar() には準拠していません=使用。
Update:Python 3.6 は、%G
、%V
および%u
ディレクティブもサポートしますlibcに存在し、このワンライナーを許可します:
>>> datetime.strptime('2011 22 1', '%G %V %u')
datetime.datetime(2011, 5, 30, 0, 0)
%Wは最初の月曜日を第1週と見なしますが、ISOは第1週を1月4日と定義しています。からの結果
datetime.strptime('2011221', '%Y%W%w')
最初の月曜日と1月4日が別の週にある場合を除いて、1つずれています。後者は、1月4日が金曜日、土曜日、または日曜日の場合です。したがって、以下が機能するはずです:
from datetime import datetime, timedelta, date
def tofirstdayinisoweek(year, week):
ret = datetime.strptime('%04d-%02d-1' % (year, week), '%Y-%W-%w')
if date(year, 1, 4).isoweekday() > 4:
ret -= timedelta(days=7)
return ret
isoweek module を使用すると、次のように実行できます。
from isoweek import Week
d = Week(2011, 40).monday()