source

Python에서 주 번호를 얻는 방법은 무엇입니까?

lovecheck 2022. 11. 19. 11:44
반응형

Python에서 주 번호를 얻는 방법은 무엇입니까?

Python과 함께 6월 16일(wk24) 현재 몇 주 번호를 확인하는 방법은 무엇입니까?

datetime.date 가지고 있다isocalendar() 주를 포함하는태플을 합니다.

>>> import datetime
>>> datetime.date(2010, 6, 16).isocalendar()[1]
24

datetime.date.isocalendar()는 지정된 날짜 인스턴스의 연도, 주 번호 및 요일을 각각 포함하는 태플을 반환하는 인스턴스입니다.

.9+ Python 3.9+의 isocalendar()필드가 포함된 명명된 태플을 반환합니다.year,week ★★★★★★★★★★★★★★★★★」weekday, 이름 Attribute, Attribute, Attribute를 으로 주에 액세스할 수 .

>>> import datetime
>>> datetime.date(2010, 6, 16).isocalendar().week
24

날짜/시간에서 직접 주 번호를 문자열로 가져올 수 있습니다.

>>> import datetime
>>> datetime.date(2010, 6, 16).strftime("%V")
'24'

주 도 다르고, 주 도 다르고, '를 바꿀 수 요.strftime★★★★★★★★★★★★★★★★★★:

%U- 0으로 패딩된 10진수로서 그 해의 주 번호(일요일은 요일)새해 첫 일요일 이전의 모든 날은 0주차인 것으로 간주됩니다.: 00, 01, …

%W·연도의 주 번호(월요일은 요일)를 10진수로 합니다.새해 첫 번째 월요일 이전의 모든 날은 0주차입니다.예: 00, 01, …, 53

[...]

(Python 3.6에 추가되어 일부 배포판의 Python 2.7에 역보도됨) C89 표준에서 필요하지 않은 몇 가지 추가 지침이 편의를 위해 포함되어 있습니다.이러한 파라미터는 모두 ISO 8601 날짜 값에 해당합니다.이 메서드와 함께 사용하면 일부 플랫폼에서 사용할 수 없는 경우가 있습니다.

[...]

%V- ISO 8601 week는 10진수이며 월요일은 주의 첫 번째 요일입니다.01주는 1월 4일을 포함하는 주입니다.: 01, 02, …, 53

from: datetime: 기본 날짜시간 유형: Python 3.7.3 문서

나는 여기서 그것에 대해 알아냈다.Python 2.7.6에서는 동작했습니다.

는 어요를 믿는다.date.isocalendar()해답이 될 거예요.이 문서에서는 ISO 8601 Calendar 뒤에 있는 계산을 설명합니다.Python 문서의 datetime 페이지의 date.isocalendar() 부분을 확인합니다.

>>> dt = datetime.date(2010, 6, 16) 
>>> wk = dt.isocalendar()[1]
24

는 ( num, day와 함께합니다.isocalendar()는 year, wk num, wk day입니다. 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(d, '%U'))

24.

참조: http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior

번호 부여에는 많은 시스템이 있습니다.다음은 코드 예제를 사용한 가장 일반적인 시스템입니다.

  • 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일(또는 연중 첫 번째 수요일)을 포함해야 합니다.이 번호 시스템에 특화된 epeeks 패키지를 작성했습니다(ISO 시스템도 지원).다음은 예를 제시하겠습니다.

    >>> from datetime import date
    >>> from epiweeks import Week
    >>> Week.fromdate(date(2014, 12, 29))
    (2014, 53)
    

일반적으로 현재 주 번호를 얻으려면(일요일부터 시작):

from datetime import *
today = datetime.today()
print today.strftime("%U")

다른 사람들이 제안하는 ISO 주간은 좋지만, 당신의 요구에 맞지 않을 수 있습니다.매주 월요일로 시작하는 것으로 가정하고 있으며, 이로 인해 연초와 연말에 몇 가지 흥미로운 이상 현상이 발생합니다.

요일에 관계없이 1주가 항상 1월 1일부터 1월 7일까지라는 정의를 사용하는 경우 다음과 같이 파생됩니다.

>>> testdate=datetime.datetime(2010,6,16)
>>> print(((testdate - datetime.datetime(testdate.year,1,1)).days // 7) + 1)
24

해당 년도의 순간 주 정수 값에 대해 다음을 시도합니다.

import datetime
datetime.datetime.utcnow().isocalendar()[1]

전체적으로 등주율만 사용하고 있는 경우는, 다음과 같이 충분합니다.

import datetime
week = date(year=2014, month=1, day=1).isocalendar()[1]

그러면 Isocalendar에 의해 반환된 튜플의 두 번째 멤버가 주 번호에 대해 검색됩니다.

그러나 그레고리력으로 처리하는 날짜 함수를 사용할 경우 등초점만으로는 작동하지 않습니다!다음 예를 들어 보겠습니다.

import datetime
date = datetime.datetime.strptime("2014-1-1", "%Y-%W-%w")
week = date.isocalendar()[1]

여기 문자열에 2014년 첫째 주 월요일을 우리의 날짜로 돌려주라고 되어 있습니다.Isocalendar를 사용하여 여기서 주 번호를 검색할 경우 동일한 주 번호를 얻을 수 있지만, 그렇지 않습니다.대신 2주라는 숫자가 나오죠. 왜요?

그레고리력으로 첫 번째 주는 월요일이 포함된 첫 번째 주입니다.등차원의 첫 번째 주는 목요일을 포함하는 첫 번째 주입니다.목요일이 되어 있기 에, 첫 , 2014년은 Isocalendar에 의한 첫 번째 주입니다.date둘째 주

그레고리 주를 얻으려면 등차원에서 그레고리력으로 변환해야 합니다.여기 기능하는 간단한 기능이 있습니다.

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

논의를 다음 두 단계로 요약합니다.

  1. 을 raw 합니다.datetime★★★★★★ 。
  2. 하다의 를 사용하세요.datetime 오브젝트date를 사용하여 numberobject: 주 번호를 합니다.

따뜻하게 하다

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().

이렇게 하면 '아까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까?strptimedatetime.strptime('2017-5-3','%Y-%m-%d')형식을 지정해야 합니다.다양한 형식 코드의 자세한 내용은 공식 문서에서 확인할 수 있습니다.

또는 dateparse 모듈을 사용하는 것이 보다 편리한 방법입니다.예를 들면 다음과 같습니다.dateparser.parse('16 Jun 2010'),dateparser.parse('12/2/12') ★★★★★★★★★★★★★★★★★」dateparser.parse('2017-5-3')

의 두 에서는 " " "가 됩니다.datetime★★★★★★ 。

두 번째 단계

것을 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() Christmas-New Year쇼핑 시즌

다음과 같이 %W 지시어를 사용할 수 있습니다.

d = datetime.datetime.strptime('2016-06-16','%Y-%m-%d')
print(datetime.datetime.strftime(d,'%W'))

'%W' : 년의 주 번호(월요일은 주의 첫 번째 요일)를 10진수로 지정합니다.새해 첫 번째 월요일 이전의 모든 날은 0주차(00, 01, ..., 53)로 간주됩니다.

모든 변종 중에서 이게 주 번호를 얻는 가장 빠른 방법이라는 걸 알아냈어요.

from datetime import datetime


dt = datetime(2021, 1, 3)  # Date is January 3rd (sunday), 2021, year starts with Friday

dt.strftime("%W")  # '00'; Monday is considered first day of week, Sunday is the last day of the week which started in the previous year
dt.strftime("%U")  # '01'; Sunday is considered first day of week
dt.strftime("%V")  # '53'; ISO week number; result is '53' since there is no Thursday in this year's part of the week

「 」의 상세 %V Python에서 수 .

ISO 연도는 52주 또는 53주로 구성되어 있으며, 일주일은 월요일에 시작하여 일요일에 끝납니다.ISO 연도의 첫 번째 주는 목요일을 포함하는 연도의 첫 번째(그레고리안) 주입니다.이것은 첫 번째 주라고 불리며, 그 목요일의 ISO 연도는 그레고리 연도와 동일합니다.

https://docs.python.org/3/library/datetime.html#datetime.date.isocalendar

를 A로 합니다.int컨스트럭터(번호가 필요한 경우)를 클릭합니다.

팬더 사용자의 경우, 주 번호 열을 얻으려면:

df['weekofyear'] = df['Date'].dt.week

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 Random의 접근법과 비교:

>>> 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

예를 들어, 1주일이 현재 날짜의 연도와 결합되어 문자열로 지정된다고 합시다.

import datetime
year,week = datetime.date.today().isocalendar()[:2]
week_of_the_year = f"{year}-{week}"
print(week_of_the_year)

2021-28년 정도 걸릴 수도 있어요

요일을 변경하려면 달력 모듈을 사용할 수 있습니다.

import calendar
import datetime

calendar.setfirstweekday(calendar.WEDNESDAY)
isodate = datetime.datetime.strptime(sweek,"%Y-%m-%d").isocalendar()
week_of_year = isodate[1]

예를 들어 수요일부터 일주일 동안 스프린트 수를 계산합니다.

def calculate_sprint(sweek):
    calendar.setfirstweekday(calendar.WEDNESDAY)
    isodate=datetime.datetime.strptime(sweek,"%Y-%m-%d").isocalendar()
    return "{year}-{month}".format(year=isodate[0], month=isodate[1])

calculate_sprint('2021-01-01')
>>>'2020-53'

비슷한 문제가 있어 1년간 테스트 케이스에 대해 테스트한 결과 모두 합격했습니다.

import datetime


def week_of_month(dt):

    first_day = dt.replace(day=1)
    dom = dt.day
    if first_day.weekday() == 6:
        adjusted_dom = dom
    else:
        adjusted_dom = dom + first_day.weekday()
    if adjusted_dom % 7 == 0 and first_day.weekday() != 6:
       value = adjusted_dom / 7.0 + 1
    elif first_day.weekday() == 6 and adjusted_dom % 7 == 0 and adjusted_dom == 7:
        value = 1
    else:
        value = int(ceil(adjusted_dom / 7.0))

    return int(value)


year = 2020
month = 01
date = 01

date_value = datetime.datetime(year, month, date).date()
no = week_of_month(date_value)
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.............!!!") 

많은 답변이 있었지만 추가하고자 합니다.

년/주 스타일로 주를 표시해야 하는 경우(2019년 1953 - 53주, 2020년 2001 - 1주 등) 다음과 같이 수행할 수 있습니다.

import datetime

year = datetime.datetime.now()
week_num = datetime.date(year.year, year.month, year.day).strftime("%V")
long_week_num = str(year.year)[0:2] + str(week_num)

현재 연도 및 주가 소요되며, 작성일 기준 long_week_num은 다음과 같습니다.

>>> 2006

언급URL : https://stackoverflow.com/questions/2600775/how-to-get-week-number-in-python

반응형