TL;DR
$ pip install japanera
from datetime import date
from japanera import Japanera, EraDate
janera = Japanera()
c_era = janera.era(date.today())
# 年号情報取得
print("現在の元号は <{}>: <{}> です".format(c_era.kanji, c_era.english))
# -> 現在の元号は <平成>: <Heisei> です
# 年号と日付からstrftime
print("本日は <{}> です".format(c_era.strftime(date(2019, 4, 16), "%-E%-O年%m月%d日")))
# -> 本日は <平成31年04月16日> です
# 元年表記にも対応
print("本日は <{}> です".format(c_era.strftime(date(1989, 8, 1), "%-E%-O年%m月%d日")))
# -> 本日は <平成元年08月01日> です
# 年号と日付からstrftime(漢字)
print("本日は <{}> です".format(c_era.strftime(date(2019, 4, 16), "%-E%-kO年%-km月%-kd日")))
# -> 本日は <平成三十一年四月十六日> です
# resultとfmtからstrptime
print(janera.strptime("本日は <平成31年04月16日>", "本日は <%-E%-O年%m月%d日>"))
# -> [datetime.datetime(2019, 4, 16, 0, 0)]
# resultとfmtからstrptime(すべてのstrftimeフォーマットに対応)
print(janera.strptime("本日は <平成三十一年四月十六日> です", "本日は <%-E%-kO年%-km月%-kd日>"))
# -> [datetime.datetime(2019, 4, 16, 0, 0)]
# EraDateで直接日付データを取得
print(EraDate(1512, 4, 16).strftime("%Y年%m月%d日は <%-E%-O年> です"))
# -> 1512年04月16日は <永正09年> です
日本の元号を扱いたい!
そんなときのJapanera (ドキュメント, GitHub)
Era
クラス、EraDate
クラス、EraDateTime
クラスがあり、それぞれ便利なクラスです。
日付から年号を取得
from japanera import EraDate, EraDateTime, Japanera
from datetime import date
janera = Japanera()
era_from_janera = janera.era(date(2019, 5, 1))
print(era_from_janera)
# 令和: Reiwa
era_from_eradate = EraDate(2019, 5, 1)
print(era_from_eradate)
# 令和-2019-05-01
print(era_from_eradate.era)
# 令和: Reiwa
print(vars(era_from_janera))
# {'kanji': '令和', 'english': 'Reiwa', 'start': datetime.date(2019, 5, 1), 'end': None, 'type': 'common'}
年号を用いたstrftime
era_date = EraDate(1520, 6, 1)
print(era_date.strftime("%-E%-O年%m月%d日"))
# 永正17年06月01日
print(era_date.strftime("%-E%-kO年%-km月%-kd日"))
# 永正十七年六月一日
使用できる記号は、datetime.date(time).strftime
に加え以下のものが追加されます。
-
%-E
: 年号の漢字名 -
%-e
:Shouwa
->Showa
のように、冗長な母音を短くした英語名 -
%-A
: 英語名 -
%-a
: 英語名の最初の文字 -
%-o
: 年号始まって以来何年目かを、下二けたの値を0埋めしたもの -
%-O
: 基本は%-o
と同じだが、1年目のみ元
が返される -
%-ko
: 年号始まって以来何年目かを、下二けたの値を0埋めしたものを漢数字にしたもの -
%-kO
: 基本は%-ko
と同じだが、1年目のみ元
が返される -
%-km
: 月を漢数字にして出力 -
%-kd
: 日を漢数字にして出力
また、Era
, EraDate
, EraDateTime
, Japanera
すべてのクラスにstrtime
が実装されています。
年号を用いたstrptime
Era
, Japanera
両方のクラスにstrptime
が実装されており、Era
の場合はマッチするdatetime.ditetime
オブジェクトを、Japanera
の場合は全ての元号を検査し、マッチしたすべてのdatetime.datetime
オブジェクトをリストで返します。
janera = Japanera()
print(janera.strptime("令和元年五月十九日", "%-E%-kO年%-km月%-kd日"))
# -> [datetime(2019, 5, 19, 0, 0)]
era = janera.era(datetime.date(2019, 5, 19))
print(era)
# 令和: Reiwa
print(era.strptime("令和元年五月十九日", "%-E%-kO年%-km月%-kd日"))
# -> 2019-05-19 00:00:00
また、このライブラリの数字-漢字変換にはkanjize
ライブラリが使用されています。
kanjize
の記事はこちらをご覧ください
そのほかにも多くの機能があります。