<질문>
내 코드에 무엇이 문제인지 알려주세요.
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)
디스플레이 "2013-01-01 00:00:00", 감사합니다.
<답변1>
주 번호는 날짜를 생성하기에 충분하지 않습니다. 요일도 필요합니다. 기본값 추가:
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
월요일을 주의 첫 번째 요일로 사용합니다. 자신의 요일을 선택할 수 있지만, 그 요일에서 벗어나면 예기치 않은 결과가 나타날 수 있습니다.
참조strftime()
and strptime()
behaviour 문서의 섹션, 각주 4:
strptime() 메서드와 함께 사용하면 %U와 %W는 요일과 연도가 지정된 경우에만 계산에 사용됩니다.
주 번호가ISO week date, 사용하고 싶을 것입니다%G-W%V-%u
대신에! 이러한 지시문에는 Python 3.6 이상이 필요합니다.
<답변2>
다른 답변을 완료하려면 - 다음을 사용하는 경우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 이상에서 사용 가능; ~에서docs.
<답변3>
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
.
<답변4>
import datetime
res = datetime.datetime.strptime("2018 W30 w1", "%Y %W w%w")
print res
요일로 1을 추가하면 정확한 현재 주 시작이 생성됩니다. timedelta(days=6)를 추가하면 주말이 됩니다.
datetime.datetime(2018, 7, 23)
<답변5>
연간 주 수가 있는 경우 해당 연도의 첫 번째 날에 주 수를 추가하기만 하면 됩니다.
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> week = 40
>>> year = 2019
>>> date = datetime.date(year,1,1)+relativedelta(weeks=+week)
>>> date
datetime.date(2019, 10, 8)
<답변6>
누구든지 주 번호에서 모든 근무일(Mo-Fr) 날짜를 반환하는 간단한 함수를 찾고 있다면 이것을 고려하십시오(기준accepted answer)
import datetime
def weeknum_to_dates(weeknum):
return [datetime.datetime.strptime("2021-W"+ str(weeknum) + str(x), "%Y-W%W-%w").strftime('%d.%m.%Y') for x in range(-5,0)]
weeknum_to_dates(37)
산출:
['17.09.2021', '16.09.2021', '15.09.2021', '14.09.2021', '13.09.2021']
<답변7>
여기handy function 제로 위크 문제를 포함합니다.
'개발 > Python' 카테고리의 다른 글
[파이썬] 클래스 개체에서 새 인스턴스를 만드는 방법 (0) | 2022.10.09 |
---|---|
[파이썬] 공유메모리의 멀티 프로세싱 (0) | 2022.10.09 |
[파이썬] SVG를 PNG로 변환 (1) | 2022.10.07 |
[파이썬] pandas에서 데이터 정규화 (Normalize data) (0) | 2022.10.07 |