和暦変換、地味に面倒じゃないですか
Pythonで和暦を扱おうとすると、だいたいこのあたりで詰まります。
-
datetime.strftimeには元号がない(ロケール頼みは環境依存でつらい) - 令和1年ではなく「令和元年」と表記したい
- 帳票やユーザー入力には「R8.7.2」「令和八年七月二日」「R8年7月2日」みたいな表記が平気で混ざってくる
- このためだけに重い依存関係を増やしたくない
自作ライブラリ flaretool の wareki モジュールはこれを全部カバーしています。内部は標準ライブラリのみ(依存ゼロ) で、Python 3.12以降で動作します。
pip install flaretool
西暦 → 和暦: to_wareki
from flaretool import wareki
print(wareki.to_wareki("2026-07-02")) # 令和8年7月2日
print(wareki.to_wareki("2019-05-01")) # 令和元年5月1日(元年表記がデフォルト)
# formatで自由に整形できる
print(wareki.to_wareki("2026-07-02", format="{era_short}{year}.{month}.{day}"))
# R8.7.2
print(wareki.to_wareki("2026-07-02", format="{era}{year_kanji}年{month_kanji}月{day_kanji}日"))
# 令和八年七月二日
# 「元年」ではなく「1年」にしたい場合
print(wareki.to_wareki("2019-05-01", gannen=False)) # 令和1年5月1日
引数は date / datetime / 文字列("2026/07/02" や "2026年7月2日"、全角数字もOK)を受け付けます。
和暦 → 西暦: to_seireki
こちらが本領です。表記ゆれをまとめてパースできます。
from flaretool import wareki
print(wareki.to_seireki("令和8年7月2日")) # 2026-07-02
print(wareki.to_seireki("R8.7.2")) # 2026-07-02
print(wareki.to_seireki("令和元年5月1日")) # 2019-05-01
print(wareki.to_seireki("令和八年七月二日")) # 2026-07-02(漢数字)
print(wareki.to_seireki("R8年7月2日")) # 2026-07-02(全角)
print(wareki.to_seireki("H31.4.30")) # 2019-04-30
R8/7/2・R8-7-2・Reiwa 8-7-2 のような区切りやローマ字表記にも対応します。解釈できない文字列や、元号の期間外の日付(昭和65年1月1日 など)は ValueError になるので、入力チェックにもそのまま使えます。
おまけ: 元号と年度
from flaretool import wareki
print(wareki.get_era("2019-04-30").name) # 平成
print(wareki.today_wareki()) # 令和8年7月2日(実行日による)
# 日本の会計年度(4月始まり。start_monthで変更可)
print(wareki.get_fiscal_year("2026-03-31")) # 2025
print(wareki.get_fiscal_year("2026-04-01")) # 2026
フォーマットのプレースホルダ一覧
| プレースホルダ | 例 |
|---|---|
{era} |
令和 |
{era_short} |
R |
{era_romaji} |
Reiwa |
{year} |
8(gannen=True で1年目は「元」) |
{year_kanji} |
八 |
{month} / {month_kanji}
|
7 / 七 |
{day} / {day_kanji}
|
2 / 二 |
信頼できる理由
- 依存ライブラリゼロ: 標準ライブラリのみで実装。flaretool自体を入れても和暦のためだけの追加依存はありません
- 改元の境界日をテスト済み: 明治→大正(1912/7/29→30)、大正→昭和(1926/12/24→25)、昭和→平成(1989/1/7→8)、平成→令和(2019/4/30→5/1)の前後を自動テストで検証しています
print(wareki.to_wareki("1989-01-07")) # 昭和64年1月7日
print(wareki.to_wareki("1989-01-08")) # 平成元年1月8日
CLIも入っているのでシェルからも使えます。
$ flaretool wareki 2026-07-02
令和8年7月2日
$ flaretool seireki R8.7.2
2026-07-02
おわりに
flaretoolには和暦以外にも、内閣府データと照合済みの祝日判定・営業日計算(flaretool holiday / flaretool business)などが入っています。よければあわせてどうぞ。
不具合や要望は GitHub Issue までお気軽に!