programing

일 년 중 어느 분기에 날짜가 있는지 확인하는 기능이 있습니까?

css3 2023. 7. 19. 21:32

일 년 중 어느 분기에 날짜가 있는지 확인하는 기능이 있습니까?

물론 제가 직접 작성할 수도 있지만, 바퀴를 재창조하기 전에 이미 이 기능을 수행할 수 있는 것이 있습니까?

예를 들면,xdatetime.date의 경우(x.month-1)//3분기를 표시합니다(1/4분기에는 0, 2/4분기에는 1 등). 대신 1부터 계산해야 할 경우 1을 추가합니다;-).


원래 두 개의 답변, 즉 다중 투표 및 심지어 원래 승인된(둘 다 현재 삭제됨) 버그였습니다. -- 하지 않았습니다.-1분할 전에, 그리고 3 대신 4로 나눕니다.부터.month1에서 12로 넘어가면 어떤 공식이 맞는지 쉽게 확인할 수 있습니다.

for m in range(1, 13):
  print m//4 + 1,
print

기브즈1 1 1 2 2 2 2 3 3 3 3 4두 개의 4개월 분기와 한 개의 1개월 분기(예약).

for m in range(1, 13):
  print (m-1)//3 + 1,
print

기브즈1 1 1 2 2 2 3 3 3 4 4 4이제 이것이 당신에게 훨씬 더 좋아 보이지 않나요?-)

이것은 질문이 충분히 정당하다는 것을 증명한다고 생각합니다;-).

저는 datetime 모듈이 반드시 가능한 모든 유용한 달력 기능을 가지고 있어야 한다고 생각하지는 않지만, 제가 (잘 테스트된;-)를 유지한다는 것은 알고 있습니다.datetools직장에서 (그리고 다른 사람들의) 프로젝트를 사용하기 위한 모듈입니다. 이 프로젝트는 이러한 달력 계산을 모두 수행할 수 있는 많은 작은 기능을 가지고 있습니다. 일부는 복잡하고, 일부는 단순하지만 작업을 반복하거나(심지어 간단한 작업도) 그러한 계산에서 버그를 위험에 빠뜨릴 이유가 없습니다.;-.

이미 사용 중인 경우pandas아주 간단합니다.

import datetime as dt
import pandas as pd

quarter = pd.Timestamp(dt.date(2016, 2, 29)).quarter
assert quarter == 1

만약 당신이 가지고 있다면.date데이터 프레임의 열, 당신은 쉽게 새로운 것을 만들 수 있습니다.quarter열:

df['quarter'] = df['date'].dt.quarter

저는 틀림없이 또 다른 더 깨끗한 해결책을 제안할 것입니다.X가 a인 경우datetime.datetime.now()예를 들어, 분기는 다음과 같습니다.

import math
Q=math.ceil(X.month/3.)

ceil은 직접 접근할 수 없기 때문에 수학 모듈에서 가져와야 합니다.

회계 연도의 4분의 1을 얻으려는 사람들을 위해 이를 수행하기 위해 파이썬 모듈을 작성했습니다.

설치는 간단합니다.그냥 실행:

$ pip install fiscalyear

종속성은 없습니다.fiscalyearPython 2와 3 모두에서 작동해야 합니다.

기본적으로 내장된 날짜/시간 모듈 주변의 래퍼입니다.datetime이미 익숙한 명령이 작동합니다.다음은 데모입니다.

>>> from fiscalyear import *
>>> a = FiscalDate.today()
>>> a
FiscalDate(2017, 5, 6)
>>> a.fiscal_year
2017
>>> a.quarter
3
>>> b = FiscalYear(2017)
>>> b.start
FiscalDateTime(2016, 10, 1, 0, 0)
>>> b.end
FiscalDateTime(2017, 9, 30, 23, 59, 59)
>>> b.q3
FiscalQuarter(2017, 3)
>>> b.q3.start
FiscalDateTime(2017, 4, 1, 0, 0)
>>> b.q3.end
FiscalDateTime(2017, 6, 30, 23, 59, 59)

fiscalyearGitHubPyPI에서 호스팅됩니다.설명서는 문서 읽기에서 찾을 수 있습니다.현재 제공되지 않는 기능을 찾으시면 알려주세요!

이것은 매우 간단하고 python3에서 작동합니다.

from datetime import datetime

# Get current date-time.
now = datetime.now()

# Determine which quarter of the year is now. Returns q1, q2, q3 or q4.
quarter_of_the_year = f'q{(now.month-1)//3+1}'

한다면m월 번호가...

import math
math.ceil(float(m) / 3)

이 방법은 모든 매핑에 적용됩니다.

month2quarter = {
        1:1,2:1,3:1,
        4:2,5:2,6:2,
        7:3,8:3,9:3,
        10:4,11:4,12:4,
    }.get

는 방금 를 생성했습니다.int->int

month2quarter(9) # returns 3

이 방법은 또한 완벽합니다.

month2quarter(-1) # returns None
month2quarter('July') # returns None

판다를 사용하여 회계연도 분기 데이터를 찾고 있는 사람들을 위해,

import datetime
import pandas as pd
today_date = datetime.date.today()
quarter = pd.PeriodIndex(today_date, freq='Q-MAR').strftime('Q%q')

참조: 판다 기간 지수

다음은 datetime.datetime 개체를 가져오고 각 분기에 대해 고유한 문자열을 반환하는 함수의 예입니다.

from datetime import datetime, timedelta

def get_quarter(d):
    return "Q%d_%d" % (math.ceil(d.month/3), d.year)

d = datetime.now()
print(d.strftime("%Y-%m-%d"), get_quarter(d))

d2 = d - timedelta(90)
print(d2.strftime("%Y-%m-%d"), get_quarter(d2))

d3 = d - timedelta(180 + 365)
print(d3.strftime("%Y-%m-%d"), get_quarter(d3))

출력은 다음과 같습니다.

2019-02-14 Q1_2019
2018-11-16 Q4_2018
2017-08-18 Q3_2017

이것은 오래된 질문이지만 여전히 논의할 가치가 있습니다.

우수한 dateutil 모듈을 사용한 제 솔루션이 여기 있습니다.

  from dateutil import rrule,relativedelta

   year = this_date.year
   quarters = rrule.rrule(rrule.MONTHLY,
                      bymonth=(1,4,7,10),
                      bysetpos=-1,
                      dtstart=datetime.datetime(year,1,1),
                      count=8)

   first_day = quarters.before(this_date)
   last_day =  (quarters.after(this_date)
                -relativedelta.relativedelta(days=1)

그렇게first_day분기의 첫 번째 날이고,last_day분기의 마지막 날입니다(다음 분기의 첫 번째 날을 찾아 하루를 뺀 값으로 계산).

x/3+1과 x/4+1로 솔루션을 시도했는데 어느 경우든 쿼터가 틀립니다.정답은 다음과 같습니다.

for i in range(1,13):
  print(((i-1)//3)+1) 
import datetime

def get_quarter_number_and_date_from_choices(p_quarter_choice):
"""
:param p_quarter_choice:
:return:
"""

current_date = datetime.date.today()
# current_quarter = current_date.month - 1 // 3 + 1
if p_quarter_choice == 'Q1':
    quarter = 1
    q_start_date = datetime.datetime(current_date.year, 3 * quarter - 2, 1)
    q_end_date = datetime.datetime(current_date.year, 3 * quarter + 1, 1) + datetime.timedelta(days=-1)
    return q_start_date, q_end_date
elif p_quarter_choice == 'Q2':
    quarter = 2
    q_start_date = datetime.datetime(current_date.year, 3 * quarter - 2, 1)
    q_end_date = datetime.datetime(current_date.year, 3 * quarter + 1, 1) + datetime.timedelta(days=-1)
    return q_start_date, q_end_date
elif p_quarter_choice == 'Q3':
    quarter = 3
    q_start_date = datetime.datetime(current_date.year, 3 * quarter - 2, 1)
    q_end_date = datetime.datetime(current_date.year, 3 * quarter + 1, 1) + datetime.timedelta(days=-1)
    return q_start_date, q_end_date
elif p_quarter_choice == 'Q4':
    quarter = 4
    q_start_date = datetime.datetime(current_date.year, 3 * quarter - 2, 1)
    q_end_date = datetime.datetime(current_date.year, 3 * quarter, 1) + datetime.timedelta(days=30)
    return q_start_date, q_end_date
return None

흠, 계산이 잘못될 수 있습니다, 여기 더 좋은 버전이 있습니다(그냥 그것을 위해).

first, second, third, fourth=1,2,3,4# you can make strings if you wish :)

quarterMap = {}
quarterMap.update(dict(zip((1,2,3),(first,)*3)))
quarterMap.update(dict(zip((4,5,6),(second,)*3)))
quarterMap.update(dict(zip((7,8,9),(third,)*3)))
quarterMap.update(dict(zip((10,11,12),(fourth,)*3)))

print quarterMap[6]

다음은 날짜 시간 및 날짜 인스턴스에 사용할 수 있는 상세하지만 읽기 쉬운 솔루션입니다.

def get_quarter(date):
    for months, quarter in [
        ([1, 2, 3], 1),
        ([4, 5, 6], 2),
        ([7, 8, 9], 3),
        ([10, 11, 12], 4)
    ]:
        if date.month in months:
            return quarter

사전을 사용하여, 당신은 이것을 해낼 수 있습니다.

def get_quarter(month):
    quarter_dictionary = {
        "Q1" : [1,2,3],
        "Q2" : [4,5,6],
        "Q3" : [7,8,9],
        "Q4" : [10,11,12]
    }

    for key,values in quarter_dictionary.items():
        for value in values:
            if value == month:
                return key

print(get_quarter(3))
for m in range(1, 13):
  print ((m*3)//10)

@Alex Marteli 공식을 사용하고 질문에 따라 빠른 함수를 만드는 재검토된 솔루션.

from datetime import timedelta, date

date_from = date(2021, 1, 1)
date_to = date(2021, 12, 31)

get_quarter = lambda dt: (dt.month-1)//3 + 1

quarter_from = get_quarter(date_from) 
quarter_to = get_quarter(date_to) 
print(quarter_from)
print(quarter_to)
# 1
# 4
def euclid(a,b):
    r = a % b
    q = int(  ( (a + b - 1) - (a - 1) % b ) / b  )
    return(q,r)

months_per_year = 12
months_per_quarter = 3

for i in range(months_per_year):
    print(i+1,euclid(i+1,months_per_quarter)[0])

#1 1
#2 1
#3 1
#4 2
#5 2
#6 2
#7 3
#8 3
#9 3
#10 4
#11 4
#12 4

언급URL : https://stackoverflow.com/questions/1406131/is-there-a-function-to-determine-which-quarter-of-the-year-a-date-is-in