元号を西暦に変換する

投稿者: | 2024年2月10日

令和になりました。
元号と西暦の変換するプログラムを書いてみました。
とりあえず書いただけなので、本当に組み込むときは、もうちょっときれいにしましょう。

元年と西暦の対応は下記の通り

元号 西暦(開始) 西暦(終了)
明治 1868/10/23 1912/07/30
大正 1912/07/30 1926/12/25
昭和 1926/12/25 1989/01/07
平成 1989/01/08 2019/04/30
令和 2019/05/01

標準入力からYYYYMMDDで入れると変換した結果を標準出力に。

    import datetime
    import math

    # 明治
    meiji_start_date  = 18681023
    meiji_end_date    = 19120730
    # 大正
    taisho_start_date = 19120730
    taisho_end_date   = 19261225
    # 昭和
    showa_start_date  = 19261225
    showa_end_date    = 19890107
    # 平成
    heisei_start_date = 19890108
    heisei_end_date   = 20190430
    # 令和
    reiwa_start_date  = 20190501

    def check(target_date):
            if target_date < meiji_start_date:
                    return "Error"
            if target_date < meiji_end_date:
                    x = math.floor( target_date / 10000 ) - math.floor( meiji_start_date / 10000) + 1
                    return "Meiji " + str(x)
            if target_date == meiji_end_date:
                    x = math.floor( target_date / 10000 ) - math.floor( meiji_start_date / 10000) + 1
                    return "Meiji " + str(x) + " and Taisho 1"
            if target_date < taisho_end_date:
                    x = math.floor( target_date / 10000 ) - math.floor( taisho_start_date / 10000) + 1
                    return "Taisho " + str(x)
            if target_date == taisho_end_date:
                    x = math.floor( target_date / 10000 ) - math.floor( taisho_start_date / 10000) + 1
                    return "Taisho " + str(x) + " and Showa 1"
            if target_date <= showa_end_date:
                    x = math.floor( target_date / 10000 ) - math.floor( showa_start_date / 10000) + 1
                    return "Showa " + str(x)
            if target_date <= heisei_end_date:
                    x = math.floor( target_date / 10000 ) - math.floor( heisei_start_date / 10000) + 1
                    return "Heisei " + str(x)
            if target_date >= reiwa_start_date:
                    x = math.floor( target_date / 10000 ) - math.floor( reiwa_start_date / 10000) + 1
                    return "Reiwa " + str(x)


    # 標準入力から日付を入力 yyyymmdd
    input_date = int(input().strip())

    print(check(input_date))

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です