24
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonライブラリ『Japanera』で年号を賢く扱う

Last updated at Posted at 2019-04-20

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の記事はこちらをご覧ください

そのほかにも多くの機能があります。

24
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?