中学理科1627080 views
中学英語809228 views
中学社会667316 views
LaTeX957931 views
高校国語786021 views
雑学1472774 views
高校倫理1434270 views
いろは2990632 views
ヒストリア285028 views
高校物理158466 views
Help
Tools

English

Python で四半期の開始日・終了日を取得する

決算報告や売上集計では、四半期(クォーター)単位でデータを扱うことが多いです。Python で四半期の開始日・終了日を取得する方法を解説します。

四半期とは

1年を3ヶ月ずつ4つに分けた期間です。一般的には以下のように区分します。

Q11月〜3月
Q24月〜6月
Q37月〜9月
Q410月〜12月

ただし会計年度によっては4月始まり(日本企業に多い)や10月始まりもあるので、用途に合わせて調整が必要です。

1月始まりの四半期

まずは暦年ベース(1月始まり)で四半期を計算してみます。

from datetime import date
import calendar

def get_quarter(d):
    """日付から四半期番号を取得(1〜4)"""
    return (d.month - 1) // 3 + 1

def quarter_range(year, quarter):
    """指定した四半期の開始日と終了日を取得"""
    start_month = (quarter - 1) * 3 + 1
    end_month = start_month + 2
    
    start_date = date(year, start_month, 1)
    end_day = calendar.monthrange(year, end_month)[1]
    end_date = date(year, end_month, end_day)
    
    return start_date, end_date

# 2025年 Q1
start, end = quarter_range(2025, 1)
print(f"Q1: {start}{end}")  # Q1: 2025-01-01 〜 2025-03-31

# 2025年 Q3
start, end = quarter_range(2025, 3)
print(f"Q3: {start}{end}")  # Q3: 2025-07-01 〜 2025-09-30

(month - 1) // 3 で 0〜3 の値が得られるので、1 を足して 1〜4 の四半期番号に変換しています。

特定の日付が属する四半期の範囲

日付を渡して、その日が含まれる四半期の範囲を取得する関数も便利です。

from datetime import date
import calendar

def get_current_quarter_range(d):
    """指定日が属する四半期の開始日と終了日を取得"""
    quarter = (d.month - 1) // 3 + 1
    start_month = (quarter - 1) * 3 + 1
    end_month = start_month + 2
    
    start_date = date(d.year, start_month, 1)
    end_day = calendar.monthrange(d.year, end_month)[1]
    end_date = date(d.year, end_month, end_day)
    
    return start_date, end_date

today = date(2025, 5, 15)
start, end = get_current_quarter_range(today)
print(f"現在の四半期: {start}{end}")
# 現在の四半期: 2025-04-01 〜 2025-06-30

4月始まりの会計年度

日本の多くの企業は4月始まりの会計年度を採用しています。

from datetime import date
import calendar

def fiscal_quarter(d, fiscal_start_month=4):
    """会計年度ベースの四半期番号を取得"""
    adjusted_month = (d.month - fiscal_start_month) % 12
    return adjusted_month // 3 + 1

def fiscal_quarter_range(fiscal_year, quarter, fiscal_start_month=4):
    """会計年度の四半期範囲を取得"""
    start_month = fiscal_start_month + (quarter - 1) * 3
    
    # 13月以上なら翌年
    if start_month > 12:
        start_month -= 12
        start_year = fiscal_year + 1
    else:
        start_year = fiscal_year
    
    end_month = start_month + 2
    if end_month > 12:
        end_month -= 12
        end_year = start_year + 1
    else:
        end_year = start_year
    
    start_date = date(start_year, start_month, 1)
    end_day = calendar.monthrange(end_year, end_month)[1]
    end_date = date(end_year, end_month, end_day)
    
    return start_date, end_date

# 2024年度(4月始まり)の Q1
start, end = fiscal_quarter_range(2024, 1)
print(f"2024年度 Q1: {start}{end}")
# 2024年度 Q1: 2024-04-01 〜 2024-06-30

# 2024年度の Q4(1〜3月なので2025年)
start, end = fiscal_quarter_range(2024, 4)
print(f"2024年度 Q4: {start}{end}")
# 2024年度 Q4: 2025-01-01 〜 2025-03-31

4月始まりの場合、Q4 は翌年の1〜3月になる点に注意してください。

四半期のリストを生成する

複数の四半期を一括で生成したい場合はジェネレータが便利です。

from datetime import date
import calendar

def generate_quarters(start_year, end_year):
    """指定期間の四半期を生成"""
    for year in range(start_year, end_year + 1):
        for quarter in range(1, 5):
            start_month = (quarter - 1) * 3 + 1
            end_month = start_month + 2
            
            start_date = date(year, start_month, 1)
            end_day = calendar.monthrange(year, end_month)[1]
            end_date = date(year, end_month, end_day)
            
            yield year, quarter, start_date, end_date

# 2024〜2025年の四半期を列挙
for year, q, start, end in generate_quarters(2024, 2025):
    print(f"{year} Q{q}: {start}{end}")

集計レポートの期間指定やグラフの軸ラベル生成などに活用できます。