Python|西暦・和暦を相互変換する

1. はじめに

Pythonで日付を扱う際、西暦と和暦(元号)を相互変換したいというニーズは意外と多くあります。たとえば、日本の業務システムや書類では「令和」や「平成」といった元号での表示が求められる場面があり、対応できるスクリプトが必要です。
本記事では、Pythonで西暦から和暦、和暦から西暦へ変換する方法を、初心者にもわかりやすく解説します。基本的な使い方から応用、注意点までを丁寧に紹介します。

 

2. Pythonで和暦と西暦を相互変換する基本

2-1. 和暦(元号)の構造と変換ロジック

和暦とは「令和○年」や「平成○年」など、日本独自の年表示方法です。Pythonの標準ライブラリには直接和暦変換機能はないため、自分で元号と年の関係を定義して処理を行います。

2-2. 西暦から和暦への変換コード

from datetime import date

# 元号の定義(令和・平成・昭和)
gengou_list = [
    ('令和', date(2019, 5, 1)),
    ('平成', date(1989, 1, 8)),
    ('昭和', date(1926, 12, 25)),
]

def seireki_to_wareki(year, month, day):
    input_date = date(year, month, day)
    for gengou, start_date in gengou_list:
        if input_date >= start_date:
            wareki_year = input_date.year - start_date.year + 1
            wareki_year_str = '元' if wareki_year == 1 else str(wareki_year)
            return f"{gengou}{wareki_year_str}年{month}月{day}日"
    return "不明な元号"
    
# 例:2023年7月25日を和暦に変換
print(seireki_to_wareki(2023, 7, 25))

実行結果:

令和5年7月25日

2-3. 和暦から西暦への変換コード

def wareki_to_seireki(gengou, wareki_year, month, day):
    for g, start_date in gengou_list:
        if g == gengou:
            year = start_date.year + (wareki_year - 1)
            return date(year, month, day).strftime('%Y年%m月%d日')
    return "不明な元号"

# 例:令和5年7月25日を西暦に変換
print(wareki_to_seireki('令和', 5, 7, 25))

実行結果:

2023年07月25日

 

3. よくある使い方・応用例

3-1. ユーザー入力から自動変換

たとえば、フォーム入力やCSVファイルで和暦のデータが渡された場合、それを自動的に西暦に変換して処理することが可能です。以下の例では、簡易的なユーザー入力処理を想定しています。

# 入力例:'平成31年4月30日'
wareki_input = '平成31年4月30日'

import re

match = re.match(r'(令和|平成|昭和)(\d+)年(\d+)月(\d+)日', wareki_input)
if match:
    gengou, year, month, day = match.groups()
    year = int(year)
    month = int(month)
    day = int(day)
    seireki = wareki_to_seireki(gengou, year, month, day)
    print(f"変換結果:{seireki}")
else:
    print("形式が正しくありません")

実行結果:

変換結果:2019年04月30日

3-2. 日付の一覧を和暦表記にして表示する

複数の日付を和暦に変換して一覧表示したい場合にも、forループを使って簡単に対応できます。

# 西暦日付のリスト
dates = [
    (1989, 1, 8),
    (2019, 5, 1),
    (2023, 7, 25)
]

for y, m, d in dates:
    print(seireki_to_wareki(y, m, d))

実行結果:

平成元年1月8日
令和元年5月1日
令和5年7月25日

 

4. 注意点・エラー対策

4-1. 元号の開始日を正確に把握する

西暦から和暦への変換では、各元号の開始日が非常に重要です。日付境界(たとえば平成から令和への切り替わり)では1日違うだけで元号が変わるため、厳密な日付の比較が必要です。

4-2. 不明な元号・未来の元号に注意

現時点で定義されていない元号(未来の元号など)を処理しようとすると、関数は「不明な元号」としてエラーを返します。業務で使う場合は、将来の対応も考えてデータのバリデーションを行いましょう。

4-3. 和暦「元年」の表記処理

元年(1年)は「1年」ではなく「元年」と表記されることが多いため、以下のように処理を分けています。

  • 令和1年 → 令和元年
  • 令和2年 → 令和2年

 

5. まとめ

今回は、Pythonで西暦と和暦(元号)を相互変換する方法を詳しく解説しました。標準ライブラリだけでは難しい処理ですが、日付と元号の対応関係を定義すれば簡単に扱うことができます。
業務アプリケーションやデータ処理、帳票出力など、実務での利用場面も多く、覚えておくと便利なテクニックです。

Pythonにおいて和暦対応はややニッチな技術ですが、日本国内での開発では実用性が高く、習得する価値があります。特にシステムのローカライズや公的文書作成に関わる場面では、即戦力として役立つでしょう。

タイトルとURLをコピーしました