Pythonで西暦を和暦にできるかやってみた

noteでPythonで西暦を和暦にしてみるを公開しました。何故やってみたのか書いて行きたいと思います。

和暦は簡単にできるんじゃないかと思った

Pythonには日付データがあるので、そこから計算すれば簡単にできるんじゃないかと思いました。調べてみたらPythonで西暦を和暦に変換するプログラムを作成するというサイトをみて、コードが思ったより長い・・・と思いましたなんかもっと簡単にできないかと思ってやってみました

西暦→和暦に変えるだけ

例えば、2000年5月1日は平成12年5月1日なので、月と日は変わらないので、西暦だけを取り出して計算すればいけるのではないかと思ってました。そのため、西暦だけ取り出してその後月日を付ければ良いかなと思い考えました。

if文でいけるのではないか?

独自関数とか作るとかではなく、単純にif文でいけるのではないかと思いました。現在の日付を取得(西暦)して、if文で 令和、平成、昭和 のどれになるか判断し、そこから計算すればいいのではないかなと思いました。

西暦の下二桁だけで計算できる

【20XX年⇔令和〇年】年号と西暦を変換する方法を見たら、西暦の下二桁だけで和暦の計算ができるのがわかりました。これを使えば凄い簡潔にできるのではないかと思いました。

コード説明

now = datetime.date.today()

で現在の日付を取得しています。yyyymmddで取得できます。

# 令和の開始日
reiwa_year = datetime.date(2019,5,1)
 #平成の開始日
heisei_year = datetime.date(1989,1,8)
 #昭和の開始日
showa_year = datetime.date(1926,12,25)

now_month = now.month
now_day = now.day

昭和~令和になった日付を変数で設定しております。now_monthとnow_dayはformatメソッドで使うため設定しているだけになります。

if now >= reiwa_year:
    #令和の和暦を計算。下二桁から18を引くことで令和になる
    reiwa = now.year % 100 - 18 #100で割ることで下二桁出す。
    now = now.strftime('%Y年%m月%d日')
    if reiwa == 1:
        reiwa = "元"

    print("{}を和暦にすると令和{}年{}月{}日です".format(now,reiwa,now_month,now_day))

if文で令和なのかどうかを判断しています。reiwaでなければ平成などに移ります。令和の場合は西暦下二桁から18を引けば令和になります。なのでnow.yearで今年の西暦(2020)年を取得し、100で割ることで下二桁の 20 を取り出し、そこから18を引きます。

差し引いた値が「1」だったら、元年と表示したいので「元」になるようにしています。

now.strftimeの使用について

now.strftime は数値型をstr型に変更するコードになります。別にこれをしなくてもnow_yearという変数を作ってそのまま西暦だけ取得というのもできます。ただその場合はコードが長くなるかなと思ったので、nowという変数だけで ●●●●年●月●日 というのをだしたかったのでstr型に変更しています。

また、now.strftime が計算式より後にきているのは、計算式は数値型同士でおこなっているからになります。先に文字列(str型)にするとエラーとなります。

短いコードでできた

自分が思ったより短いコードでできました。githubにコードはあげてありますのでもし使って見たいという方は使ってください

個人支援・寄付について

サイトラボではBuildreeの開発などのため、現在個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではkyashというサービスをつかっております。ビットコインでも受け付けております。