web-dev-qa-db-ja.com

週番号から日付を取得

私のコードの何が問題なのかしてください:

import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)

「2013-01-01 00:00:00」、ありがとうございます。

63
Ali SAID OMAR

週番号は日付を生成するのに十分ではありません。曜日も必要です。デフォルトを追加します。

_import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d + '-1', "%Y-W%W-%w")
print(r)
_

_-1_および_-%w_パターンは、その週の月曜日を選択するようにパーサーに指示します。この出力:

_2013-07-01 00:00:00
_

_%W_は月曜日を週の最初の日として使用します。独自の平日を選択できますが、それから逸脱すると予期しない結果が生じる可能性があります。

ドキュメントの脚注4の strftime()およびstrptime()動作 セクションを参照してください。

strptime()メソッドとともに使用する場合、_%U_および_%W_は、曜日と年が指定されている場合にのみ計算で使用されます。

週番号が ISO週日 の場合、代わりに_%G-W%V-%u_を使用する必要があることに注意してください!これらのディレクティブにはPython 3.6以降が必要です。

119
Martijn Pieters

他の回答を完了するには-[〜#〜] iso [〜#〜]週番号を使用している場合、この文字列は適切です(取得するには)特定のISO週番号の月曜日):

import datetime
d = '2013-W26'
r = datetime.datetime.strptime(d + '-1', '%G-W%V-%u')
print(r)

%G%V%uはISOに相当する%Y%W%w、したがって、これは出力します:

2013-06-24 00:00:00

Python 3.6+; from docs

7
Luka Kikelj
import datetime
res = datetime.datetime.strptime("2018 W30 w1", "%Y %W w%w")
print res

曜日として1を追加すると、正確な現在の週の開始が生成されます。 timedelta(days = 6)を追加すると、週末が始まります。

datetime.datetime(2018, 7, 23)
3
Senthilkumar C

これは、ゼロ週の問題を含む 便利な関数 です。

0
Ron