파이썬에서 주 번호를 얻는 방법?
파이썬으로 6 월 16 일 (wk24)의 현재 주 번호를 찾는 방법은 무엇입니까?
datetime.date
isocalendar()
달력 주를 포함하는 튜플을 반환 하는 메서드 가 있습니다 .
>>> import datetime
>>> datetime.date(2010, 6, 16).isocalendar()[1]
24
datetime.date.isocalendar () 는 주어진 날짜 인스턴스에 대해 연도, 주 번호 및 주일을 포함하는 튜플을 반환하는 인스턴스 메소드입니다.
datetime에서 주 번호를 문자열로 직접 가져올 수 있습니다.
>>> import datetime
>>> datetime.date(2010, 6, 16).strftime("%V")
'24'
또한 다음에 대한 strftime
매개 변수를 변경하여 연중 주 번호의 다른 "유형"을 얻을 수 있습니다 .
%U
- 연도의 주 번호 (일요일의 첫 번째 요일) 를 0으로 채워진 10 진수로 나타냅니다. 첫 번째 일요일 이전의 새해의 모든 날은 0 주로 간주됩니다. 예 : 00 , 01,…, 53
%W
-연도의 주 번호 ( 월요일 의 첫 번째 요일)를 10 진수로 나타냅니다. 첫 번째 월요일 이전의 새해의 모든 날은 0 주로 간주됩니다. 예 : 00 , 01,…, 53[...]
( Python 3.6에 추가되어 일부 배포판의 Python 2.7로 백 포트 됨 ) 편의를 위해 C89 표준에 필요하지 않은 몇 가지 추가 지시문이 포함되었습니다. 이 매개 변수는 모두 ISO 8601 날짜 값에 해당합니다. 이
strftime()
방법 과 함께 사용하면 일부 플랫폼에서 사용하지 못할 수 있습니다 .[...]
%V
- 월요일을 요일의 첫 번째 요일 로하는 10 진수 ISO 8601 주. 01주는 1 월 4 일이 포함 된 주입니다. 예 : 01 , 02,…, 53
나는에서 그것에 대해 발견했습니다 여기에 . 그것은 파이썬 2.7.6에서 나를 위해 일했습니다.
나는 date.isocalendar()
대답이 될 것이라고 믿습니다 . 이 기사 는 ISO 8601 캘린더의 기본 원리를 설명합니다. Python 문서 의 datetime 페이지 에서 date.isocalendar () 부분을 확인하십시오 .
>>> dt = datetime.date(2010, 6, 16)
>>> wk = dt.isocalendar()[1]
24
.isocalendar ()는 (year, wk num, wk day)로 3 튜플을 반환합니다. dt.isocalendar()[0]
연도를 dt.isocalendar()[1]
반환하고, 주 번호를 dt.isocalendar()[2]
반환하고, 요일을 반환합니다. 가능한 한 간단합니다.
다른 옵션이 있습니다 :
import time
from time import gmtime, strftime
d = time.strptime("16 Jun 2010", "%d %b %Y")
print(strftime("%U", d))
인쇄합니다 24
.
참조 : http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior
다른 사람들이 제안한 ISO 주간은 좋은 것이지만 귀하의 요구에 맞지 않을 수 있습니다. 매주 월요일로 시작한다고 가정하여 연말과 말에 흥미로운 예외가 발생합니다.
요일에 관계없이 1 주차가 항상 1 월 1 일부터 1 월 7 일까지 인 정의를 사용하려면 다음과 같이 파생을 사용하십시오.
>>> testdate=datetime.datetime(2010,6,16)
>>> print(((testdate - datetime.datetime(testdate.year,1,1)).days // 7) + 1)
24
일반적으로 현재 주 번호를 얻으려면 (일요일부터 시작) :
from datetime import *
today = datetime.today()
print today.strftime("%U")
연중 순간의 정수 값에 대해 다음을 시도하십시오.
import datetime
datetime.datetime.utcnow().isocalendar()[1]
보드에서 isocalendar 주 번호 만 사용하는 경우 다음이 충분해야합니다.
import datetime
week = date(year=2014, month=1, day=1).isocalendar()[1]
이것은 우리 주 번호에 대해 isocalendar에 의해 리턴 된 튜플의 두 번째 멤버를 검색합니다.
그러나 그레고리력을 다루는 날짜 함수를 사용하려는 경우 isocalendar만으로는 작동하지 않습니다! 다음 예를 보자.
import datetime
date = datetime.datetime.strptime("2014-1-1", "%Y-%W-%w")
week = date.isocalendar()[1]
이 문자열은 2014 년 첫 주 월요일을 날짜로 반환한다고합니다. 여기서 isocalendar를 사용하여 주 번호를 검색하면 동일한 주 번호를 다시 얻을 것으로 예상되지만 그렇지 않습니다. 대신 우리는 2의 주 번호를 얻습니다. 왜?
그레고리력의 1 주차는 월요일이 포함 된 첫 주입니다. isocalendar의 1 주차는 목요일을 포함하는 첫 번째 주입니다. 2014 년 초의 부분 주에는 목요일이 포함되어 있기 때문에 이것은 isocalendar의 1 주차이고 date
2 주차입니다
우리가 그레고리력 주간을 원한다면, 이소 렌더에서 그레고리력으로 변환해야합니다. 다음은 트릭을 수행하는 간단한 기능입니다.
import datetime
def gregorian_week(date):
# The isocalendar week for this date
iso_week = date.isocalendar()[1]
# The baseline Gregorian date for the beginning of our date's year
base_greg = datetime.datetime.strptime('%d-1-1' % date.year, "%Y-%W-%w")
# If the isocalendar week for this date is not 1, we need to
# decrement the iso_week by 1 to get the Gregorian week number
return iso_week if base_greg.isocalendar()[1] == 1 else iso_week - 1
datetime.datetime.isocalendar를 보십시오 .
다음과 같이 % W 지시문을 시도 할 수 있습니다.
d = datetime.datetime.strptime('2016-06-16','%Y-%m-%d')
print(datetime.datetime.strftime(d,'%W'))
'% W': 연도의 주 번호 (월요일의 첫 번째 요일)를 10 진수로 나타냅니다. 첫 번째 월요일 이전의 새해의 모든 날은 0 주로 간주됩니다. (00, 01, ..., 53)
isocalendar ()는 일부 날짜에 대해 잘못된 연도 및 주 번호를 반환합니다.
Python 2.7.3 (default, Feb 27 2014, 19:58:35)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime as dt
>>> myDateTime = dt.datetime.strptime("20141229T000000.000Z",'%Y%m%dT%H%M%S.%fZ')
>>> yr,weekNumber,weekDay = myDateTime.isocalendar()
>>> print "Year is " + str(yr) + ", weekNumber is " + str(weekNumber)
Year is 2015, weekNumber is 1
Mark Ransom의 접근 방식과 비교하십시오.
>>> yr = myDateTime.year
>>> weekNumber = ((myDateTime - dt.datetime(yr,1,1)).days/7) + 1
>>> print "Year is " + str(yr) + ", weekNumber is " + str(weekNumber)
Year is 2014, weekNumber is 52
토론을 두 단계로 요약합니다.
- 원시 형식을
datetime
객체로 변환하십시오 . datetime
개체 또는 개체 의 기능을 사용하여date
주 번호를 계산하십시오.
워밍업
```파이썬
from datetime import datetime, date, time
d = date(2005, 7, 14)
t = time(12, 30)
dt = datetime.combine(d, t)
print(dt)
```
1 단계
수동으로 생성하려면 datetime
개체를 우리가 사용할 수 있습니다 datetime.datetime(2017,5,3)
또는 datetime.datetime.now()
.
그러나 실제로는 기존 문자열을 구문 분석해야합니다. 형식을 구체적으로 지정해야하는 strptime
기능 을 사용할 수 있습니다 datetime.strptime('2017-5-3','%Y-%m-%d')
. 다른 형식 코드에 대한 자세한 내용은 공식 문서를 참조하십시오 .
또는 더 편리한 방법은 dateparse 모듈 을 사용하는 것 입니다. 예는 dateparser.parse('16 Jun 2010')
, dateparser.parse('12/2/12')
또는dateparser.parse('2017-5-3')
위의 두 가지 접근 방식은 datetime
객체 를 반환 합니다.
2 단계
획득 한 datetime
객체를 사용하여을 호출 strptime(format)
합니다. 예를 들어
```파이썬
dt = datetime.strptime('2017-01-1','%Y-%m-%d') # return a datetime object. This day is Sunday
print(dt.strftime("%W")) # '00' Monday as the 1st day of the week. All days in a new year preceding the 1st Monday are considered to be in week 0.
print(dt.strftime("%U")) # '01' Sunday as the 1st day of the week. All days in a new year preceding the 1st Sunday are considered to be in week 0.
print(dt.strftime("%V")) # '52' Monday as the 1st day of the week. Week 01 is the week containing Jan 4.
```
사용할 형식을 결정하는 것은 매우 까다 롭습니다. 더 좋은 방법은 date
호출 할 객체를 얻는 것입니다 isocalendar()
. 예를 들어
```파이썬
dt = datetime.strptime('2017-01-1','%Y-%m-%d') # return a datetime object
d = dt.date() # convert to a date object. equivalent to d = date(2017,1,1), but date.strptime() don't have the parse function
year, week, weekday = d.isocalendar()
print(year, week, weekday) # (2016,52,7) in the ISO standard
```
실제로, date.isocalendar()
특히 "크리스마스-새해"쇼핑 시즌에 매주 보고서를 작성하는 데 더 많이 사용할 것 입니다.
userInput = input ("Please enter project deadline date (dd/mm/yyyy/): ")
import datetime
currentDate = datetime.datetime.today()
testVar = datetime.datetime.strptime(userInput ,"%d/%b/%Y").date()
remainDays = testVar - currentDate.date()
remainWeeks = (remainDays.days / 7.0) + 1
print ("Please pay attention for deadline of project X in days and weeks are : " ,(remainDays) , "and" ,(remainWeeks) , "Weeks ,\nSo hurryup.............!!!")
주 번호 매기기를위한 많은 시스템 이 있습니다 . 다음은 코드 예제와 함께 가장 일반적인 시스템입니다.
ISO : 첫주는 월요일로 시작하며 1 월 4 일을 포함해야합니다. ISO 캘린더는 이미 Python으로 구현되어 있습니다.
>>> from datetime import date >>> date(2014, 12, 29).isocalendar()[:2] (2015, 1)
북미 : 첫주는 일요일로 시작하며 1 월 1 일을 포함해야합니다. 다음 코드는 북미 시스템에 대한 수정 된 Python ISO 캘린더 구현 버전입니다.
from datetime import date def week_from_date(date_object): date_ordinal = date_object.toordinal() year = date_object.year week = ((date_ordinal - _week1_start_ordinal(year)) // 7) + 1 if week >= 52: if date_ordinal >= _week1_start_ordinal(year + 1): year += 1 week = 1 return year, week def _week1_start_ordinal(year): jan1 = date(year, 1, 1) jan1_ordinal = jan1.toordinal() jan1_weekday = jan1.weekday() week1_start_ordinal = jan1_ordinal - ((jan1_weekday + 1) % 7) return week1_start_ordinal
>>> from datetime import date >>> week_from_date(date(2014, 12, 29)) (2015, 1)
- MMWR (CDC) : 첫주는 일요일로 시작하며 1 월 4 일을 포함해야합니다. 이 번호 체계를 위해 특별히 epiweeks 패키지를 만들었습니다 . 예를 들면 다음과 같습니다.
>>> from datetime import date >>> from epiweeks import Week >>> Week.fromdate(date(2014, 12, 29)) (2014, 53)
참고 URL : https://stackoverflow.com/questions/2600775/how-to-get-week-number-in-python
'development' 카테고리의 다른 글
Visual Studio에서 자동 줄 바꿈을 전환하는 방법은 무엇입니까? (0) | 2020.03.18 |
---|---|
Groovy의 파일을 문자열로 읽는 방법은 무엇입니까? (0) | 2020.03.18 |
거부 됨 : 리소스에 대한 요청 된 액세스가 거부되었습니다. : docker (0) | 2020.03.17 |
MySQL에서 datetime에 삽입 할 때 PHP date () 형식 (0) | 2020.03.17 |
Rails 4에서 참조 열 마이그레이션 추가 (0) | 2020.03.17 |