내 코드에 무엇이 잘못되었는지 알려주세요.
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)
"2013-01-01 00:00:00"표시, 감사합니다.
내 코드에 무엇이 잘못되었는지 알려주세요.
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)
"2013-01-01 00:00:00"표시, 감사합니다.
답변:
주 번호만으로는 날짜를 생성 할 수 없습니다. 요일도 필요합니다. 기본값 추가 :
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 이상이 필요합니다.
if d.endswith('-W0') and r.day == 7: raise ValueError('Invalid date string, No week 0 in {}'.format(r.year))
%G
(주 중 대부분의 경우 연도)을 지원합니다 %V
.
Python 3.8에는 편리한 기능이 있습니다 datetime.date.fromisocalendar
.
>>> from datetime import date
>>> date.fromisocalendar(2020, 1, 1) # (year, week, day of week)
datetime.date(2019, 12, 30, 0, 0)
이전 Python 버전 (3.7-)에서 계산은 정보를 사용하여 datetime.date.isocalendar
ISO8601 준수 주를 파악할 수 있습니다 .
from datetime import date, timedelta
def monday_of_calenderweek(year, week):
first = date(year, 1, 1)
base = 1 if first.isocalendar()[1] == 1 else 8
return first + timedelta(days=base - first.isocalendar()[2] + 7 * (week - 1))
둘 다 datetime.datetime
.
import datetime
res = datetime.datetime.strptime("2018 W30 w1", "%Y %W w%w")
print res
요일에 1을 추가하면 정확한 현재 주 시작이 생성됩니다. timedelta (days = 6)를 추가하면 주말이 끝납니다.
datetime.datetime(2018, 7, 23)
res = datetime.datetime.strptime("2018 W30 w1", "%Y W%W w%w")