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