中学理科1626207 views
いろは2986023 views
LaTeX957300 views
高校生物549842 views
ヒストリア284143 views
世界の国560595 views
Computer365120 views
中学数学621382 views
りんご192546 views
高校化学2913383 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}")

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