Skip to content

Instantly share code, notes, and snippets.

@roflsunriz
Last active January 12, 2025 00:33
Show Gist options
  • Save roflsunriz/2067e24839ddf869985a69253c1d25e8 to your computer and use it in GitHub Desktop.
Save roflsunriz/2067e24839ddf869985a69253c1d25e8 to your computer and use it in GitHub Desktop.
japaneseEra : 和暦(年号・元号)西暦変換プログラム
class JapaneseEra:
ERA_STARTS = {
"飛鳥": 592,
"白雉": 650,
"天武": 672,
"朱鳥": 686,
"大宝": 701,
"慶雲": 704,
"和銅": 708,
"霊亀": 715,
"養老": 717,
"神亀": 724,
"天平": 729,
"天平感宝": 749,
"天平勝宝": 749,
"天平宝字": 757,
"天平神護": 765,
"神護景雲": 767,
"宝亀": 770,
"天応": 781,
"延暦": 782,
"大同": 806,
"弘仁": 810,
"天長": 824,
"承和": 834,
"嘉祥": 848,
"仁寿": 851,
"斉衡": 854,
"天安": 857,
"貞観": 859,
"元慶": 877,
"仁和": 885,
"寛平": 889,
"昌泰": 898,
"延喜": 901,
"延長": 923,
"承平": 931,
"天慶": 938,
"天暦": 947,
"天徳": 957,
"応和": 961,
"康保": 964,
"安和": 968,
"天禄": 970,
"天延": 973,
"貞元": 976,
"天元": 978,
"永観": 983,
"寛和": 985,
"永延": 987,
"永祚": 989,
"正暦": 990,
"長徳": 995,
"長保": 999,
"寛弘": 1004,
"長和": 1012,
"寛仁": 1017,
"治安": 1021,
"万寿": 1024,
"長元": 1028,
"長暦": 1037,
"長久": 1040,
"寛徳": 1044,
"永承": 1046,
"天喜": 1053,
"康平": 1058,
"治暦": 1065,
"延久": 1069,
"承保": 1074,
"承暦": 1077,
"永保": 1081,
"応徳": 1084,
"寛治": 1087,
"嘉保": 1094,
"永長": 1096,
"承徳": 1097,
"康和": 1099,
"長治": 1104,
"嘉承": 1106,
"天仁": 1108,
"天永": 1110,
"永久": 1113,
"元永": 1118,
"保安": 1120,
"天治": 1124,
"大治": 1126,
"天承": 1131,
"長承": 1132,
"保延": 1135,
"永治": 1141,
"康治": 1142,
"天養": 1144,
"久安": 1145,
"仁平": 1151,
"久寿": 1154,
"保元": 1156,
"平治": 1159,
"永暦": 1160,
"応保": 1161,
"長寛": 1163,
"永万": 1165,
"仁安": 1166,
"嘉応": 1169,
"承安": 1171,
"安元": 1175,
"治承": 1177,
"養和": 1181,
"寿永": 1182,
"元暦": 1184,
"文治": 1185,
"建久": 1190,
"正治": 1199,
"建仁": 1201,
"元久": 1204,
"建永": 1206,
"承元": 1207,
"建暦": 1211,
"建保": 1213,
"承久": 1219,
"貞応": 1222,
"元仁": 1224,
"嘉禄": 1225,
"安貞": 1227,
"寛喜": 1229,
"貞永": 1232,
"天福": 1233,
"文暦": 1234,
"嘉禎": 1235,
"暦仁": 1238,
"延応": 1239,
"仁治": 1240,
"寛元": 1243,
"宝治": 1247,
"建長": 1249,
"康元": 1256,
"正嘉": 1257,
"正元": 1259,
"文応": 1260,
"弘長": 1261,
"文永": 1264,
"建治": 1275,
"弘安": 1278,
"正応": 1288,
"永仁": 1293,
"正安": 1299,
"乾元": 1302,
"嘉元": 1303,
"徳治": 1306,
"延慶": 1308,
"応長": 1311,
"正和": 1312,
"文保": 1317,
"元応": 1319,
"元亨": 1321,
"正中": 1324,
"嘉暦": 1326,
"元徳": 1329,
"正慶": 1332,
"建武": 1334,
"延元": 1336,
"興国": 1340,
"正平": 1346,
"観応": 1350,
"文和": 1352,
"延文": 1356,
"康安": 1361,
"貞治": 1362,
"応安": 1368,
"永和": 1375,
"康暦": 1379,
"永徳": 1381,
"至徳": 1384,
"嘉慶": 1387,
"康応": 1389,
"明徳": 1390,
"応永": 1394,
"正長": 1428,
"永享": 1429,
"嘉吉": 1441,
"文安": 1444,
"宝徳": 1449,
"享徳": 1452,
"康正": 1455,
"長禄": 1457,
"寛正": 1460,
"文正": 1466,
"応仁": 1467,
"文明": 1469,
"長享": 1487,
"延徳": 1489,
"明応": 1492,
"文亀": 1501,
"永正": 1504,
"大永": 1521,
"享禄": 1528,
"天文": 1532,
"弘治": 1555,
"永禄": 1558,
"元亀": 1570,
"天正": 1573,
"文禄": 1592,
"慶長": 1596,
"元和": 1615,
"寛永": 1624,
"正保": 1644,
"慶安": 1648,
"承応": 1652,
"明暦": 1655,
"万治": 1658,
"寛文": 1661,
"延宝": 1673,
"天和": 1681,
"貞享": 1684,
"元禄": 1688,
"宝永": 1704,
"正徳": 1711,
"享保": 1716,
"元文": 1736,
"寛保": 1741,
"延享": 1744,
"寛延": 1748,
"宝暦": 1751,
"明和": 1764,
"安永": 1772,
"天明": 1781,
"寛政": 1789,
"享和": 1801,
"文化": 1804,
"文政": 1818,
"天保": 1830,
"弘化": 1844,
"嘉永": 1848,
"安政": 1854,
"万延": 1860,
"文久": 1861,
"元治": 1864,
"慶応": 1865,
"明治": 1868,
"大正": 1912,
"昭和": 1926,
"平成": 1989,
"令和": 2019
}
ERA_INITIALS = {
# 現代の元号(1文字)- 大文字小文字両方対応
'R': '令和', # REIWA
'r': '令和',
'H': '平成', # HEISEI
'h': '平成',
'S': '昭和', # SHOWA/SYOWA
's': '昭和',
'T': '大正', # TAISHO/TAISYO
't': '大正',
'M': '明治', # MEIJI
'm': '明治',
# 現代の元号(フル)- ヘボン式対応
'REIWA': '令和',
'reiwa': '令和',
'HEISEI': '平成',
'heisei': '平成',
'SHOWA': '昭和',
'SYOWA': '昭和',
'showa': '昭和',
'syowa': '昭和',
'TAISHO': '大正',
'TAISYO': '大正',
'taisho': '大正',
'taisyo': '大正',
'MEIJI': '明治',
'meiji': '明治',
# 江戸時代以前(フルネーム)- ヘボン式対応
'KEIO': '慶応',
'keio': '慶応',
'GENJI': '元治',
'genji': '元治',
'BUNKYUU': '文久',
'BUNKYUU': '文久',
'bunkyuu': '文久',
'bunkyu': '文久',
'MANEN': '万延',
'manen': '万延',
'ANSEI': '安政',
'ansei': '安政',
'KAEI': '嘉永',
'kaei': '嘉永',
'KOUKA': '弘化',
'kouka': '弘化',
'TENPOU': '天保',
'TENPO': '天保',
'tenpou': '天保',
'tenpo': '天保',
'BUNSEI': '文政',
'bunsei': '文政',
'BUNKA': '文化',
'bunka': '文化',
'KYOUWA': '享和',
'KYOWA': '享和',
'kyouwa': '享和',
'kyowa': '享和',
'KANSEI': '寛政',
'kansei': '寛政',
'TENMEI': '天明',
'tenmei': '天明',
'ANEI': '安永',
'anei': '安永',
'MEIWA': '明和',
'meiwa': '明和',
'HOUREKI': '宝暦',
'HOREKI': '宝暦',
'houreki': '宝暦',
'horeki': '宝暦',
'KANEN': '寛延',
'kanen': '寛延',
'ENKYOU': '延享',
'ENKYO': '延享',
'enkyou': '延享',
'enkyo': '延享',
'KANPOU': '寛保',
'KANPO': '寛保',
'kanpou': '寛保',
'kanpo': '寛保',
'GENBUN': '元文',
'genbun': '元文',
'KYOUHOU': '享保',
'KYOHO': '享保',
'kyouhou': '享保',
'kyoho': '享保',
'SHOUTOKU': '正徳',
'SHOTOKU': '正徳',
'shoutoku': '正徳',
'shotoku': '正徳',
'HOUEI': '宝永',
'HOEI': '宝永',
'houei': '宝永',
'hoei': '宝永',
'GENROKU': '元禄',
'genroku': '元禄',
'JOUKYOU': '貞享',
'JOKYO': '貞享',
'joukyou': '貞享',
'jokyo': '貞享',
'TENNA': '天和',
'tenna': '天和',
'ENPOU': '延宝',
'EMPO': '延宝',
'enpou': '延宝',
'empo': '延宝',
'KANBUN': '寛文',
'kanbun': '寛文',
'MANJI': '万治',
'manji': '万治',
'MEIREKI': '明暦',
'meireki': '明暦',
'JOUOU': '承応',
'JOOU': '承応',
'jouou': '承応',
'joou': '承応',
'KEIAN': '慶安',
'keian': '慶安',
'SHOUHOU': '正保',
'SHOHO': '正保',
'shouhou': '正保',
'shoho': '正保',
'GENNA': '元和',
'genna': '元和',
'KEICHOU': '慶長',
'KEICHO': '慶長',
'keichou': '慶長',
'keicho': '慶長',
'BUNROKU': '文禄',
'bunroku': '文禄',
'TENSHOU': '天正',
'TENSHO': '天正',
'tenshou': '天正',
'tensho': '天正',
'GENKI': '元亀',
'genki': '元亀',
'EIROKU': '永禄',
'eiroku': '永禄',
'KOUJI': '弘治',
'KOJI': '弘治',
'kouji': '弘治',
'koji': '弘治',
'TENBUN': '天文',
'tenbun': '天文',
'KYOUROKU': '享禄',
'KYOROKU': '享禄',
'kyouroku': '享禄',
'kyoroku': '享禄',
'DAIEI': '大永',
'daiei': '大永',
'EISHOU': '永正',
'EISHO': '永正',
'eishou': '永正',
'eisho': '永正',
'BUNKI': '文亀',
'bunki': '文亀',
'MEIOU': '明応',
'MEIO': '明応',
'meiou': '明応',
'meio': '明応',
'ENTOKU': '延徳',
'entoku': '延徳',
'CHOUKYOU': '長享',
'CHOKYO': '長享',
'choukyou': '長享',
'chokyo': '長享',
'BUNMEI': '文明',
'bunmei': '文明',
'OUNIN': '応仁',
'ONIN': '応仁',
'ounin': '応仁',
'onin': '応仁',
'BUNSHOU': '文正',
'BONSHO': '文正',
'bunshou': '文正',
'bonsho': '文正',
'KANSHOU': '寛正',
'KANCHO': '寛正',
'kanshou': '寛正',
'kancho': '寛正',
'CHOUROKU': '長禄',
'CHOROKU': '長禄',
'chouroku': '長禄',
'choroku': '長禄',
'KOUSHOU': '康正',
'KOSHO': '康正',
'koushou': '康正',
'kosho': '康正',
'KYOUTOKU': '享徳',
'KYOTOKU': '享徳',
'kyoutoku': '享徳',
'kyotoku': '享徳',
'HOUTOKU': '宝徳',
'HOTOKU': '宝徳',
'houtoku': '宝徳',
'hotoku': '宝徳',
'BUNAN': '文安',
'bunan': '文安',
'KAKITSU': '嘉吉',
'kakitsu': '嘉吉',
'EIKYOU': '永享',
'EIKYO': '永享',
'eikyou': '永享',
'eikyo': '永享',
'SHOUCHO': '正長',
'SHOCHO': '正長',
'shoucho': '正長',
'shocho': '正長',
'OUEI': '応永',
'OEI': '応永',
'ouei': '応永',
'oei': '応永',
'MEITOKU': '明徳',
'meitoku': '明徳',
'KOUOU': '康応',
'KOO': '康応',
'kouou': '康応',
'koo': '康応',
'KAKEI': '嘉慶',
'kakei': '嘉慶',
'SHITOKU': '至徳',
'shitoku': '至徳',
'EITOKU': '永徳',
'eitoku': '永徳',
'KOURYAKU': '康暦',
'KORYAKU': '康暦',
'kouryaku': '康暦',
'koryaku': '康暦',
'EIWA': '永和',
'eiwa': '永和',
'OUAN': '応安',
'OAN': '応安',
'ouan': '応安',
'oan': '応安',
'JOJI': '貞治',
'joji': '貞治',
'KOUAN': '康安',
'KOAN': '康安',
'kouan': '康安',
'koan': '康安',
'ENBUN': '延文',
'enbun': '延文',
'BUNWA': '文和',
'bunwa': '文和',
'KANNOU': '観応',
'KANNO': '観応',
'kannou': '観応',
'kanno': '観応',
'SHOUEI': '正平',
'SHOHEI': '正平',
'shouei': '正平',
'shohei': '正平',
'KOUKOKU': '興国',
'KOKOKU': '興国',
'koukoku': '興国',
'kokoku': '興国',
'ENGEN': '延元',
'engen': '延元',
'KENMU': '建武',
'kenmu': '建武',
'SHOUKYOU': '正慶',
'SHOKYO': '正慶',
'shoukyou': '正慶',
'shokyo': '正慶',
'GENTOKU': '元徳',
'gentoku': '元徳',
'KAREKI': '嘉暦',
'kareki': '嘉暦',
'SHOUCHUU': '正中',
'SHOCHU': '正中',
'shouchuu': '正中',
'shochu': '正中',
'GENKO': '元亨',
'genko': '元亨',
'GENOU': '元応',
'GENO': '元応',
'genou': '元応',
'geno': '元応',
'BUNPOU': '文保',
'BUNPO': '文保',
'bunpou': '文保',
'bunpo': '文保',
'SHOUWA': '正和',
'SHOWA': '正和',
'shouwa': '正和',
'showa': '正和',
'OUCHOU': '応長',
'OCHO': '応長',
'ouchou': '応長',
'ocho': '応長',
'ENKYOU': '延慶',
'ENKYO': '延慶',
'enkyou': '延慶',
'enkyo': '延慶',
'TOKUJI': '徳治',
'tokuji': '徳治',
'KAGEN': '嘉元',
'kagen': '嘉元',
'KENGEN': '乾元',
'kengen': '乾元',
'SHOAN': '正安',
'shoan': '正安',
'EININ': '永仁',
'einin': '永仁',
'SHOUOU': '正応',
'SHOO': '正応',
'shouou': '正応',
'shoo': '正応',
'KOUAN': '弘安',
'KOAN': '弘安',
'kouan': '弘安',
'koan': '弘安',
'KENJI': '建治',
'kenji': '建治',
'BUNNEI': '文永',
'BUNEI': '文永',
'bunnei': '文永',
'bunei': '文永',
'KOUCHO': '弘長',
'KOCHO': '弘長',
'koucho': '弘長',
'kocho': '弘長',
'BUNOU': '文応',
'BUNO': '文応',
'bunou': '文応',
'buno': '文応',
'SHOUKA': '正嘉',
'SHOKA': '正嘉',
'shouka': '正嘉',
'shoka': '正嘉',
'KOUEN': '康元',
'KOEN': '康元',
'kouen': '康元',
'koen': '康元',
'KENCHOU': '建長',
'KENCHO': '建長',
'kenchou': '建長',
'kencho': '建長',
'HOUJI': '宝治',
'HOJI': '宝治',
'houji': '宝治',
'hoji': '宝治',
'KANGEN': '寛元',
'kangen': '寛元',
'NINJI': '仁治',
'ninji': '仁治',
'ENOU': '延応',
'ENO': '延応',
'enou': '延応',
'eno': '延応',
'REKININ': '暦仁',
'rekinin': '暦仁',
'KATEI': '嘉禎',
'katei': '嘉禎',
'BUNRYAKU': '文暦',
'BUNREKI': '文暦',
'bunryaku': '文暦',
'bunreki': '文暦',
'TENPUKU': '天福',
'tenpuku': '天福',
'JOUEI': '貞永',
'JOEI': '貞永',
'jouei': '貞永',
'joei': '貞永',
'KANKI': '寛喜',
'kanki': '寛喜',
'ANTEI': '安貞',
'antei': '安貞',
'KAROKU': '嘉禄',
'karoku': '嘉禄',
'GENNIN': '元仁',
'gennin': '元仁',
'JOUOU': '貞応',
'JOOU': '貞応',
'jouou': '貞応',
'joou': '貞応',
'JOUKYUU': '承久',
'JOKYU': '承久',
'joukyuu': '承久',
'jokyu': '承久',
'KENPOU': '建保',
'KENPO': '建保',
'kenpou': '建保',
'kenpo': '建保',
'KENRYAKU': '建暦',
'kenryaku': '建暦',
'JOUGEN': '承元',
'JOGEN': '承元',
'jougen': '承元',
'jogen': '承元',
'KENEI': '建永',
'kenei': '建永',
'GENKYUU': '元久',
'GENKYU': '元久',
'genkyuu': '元久',
'genkyu': '元久',
'KENNIN': '建仁',
'kennin': '建仁',
'SHOUJI': '正治',
'SHOJI': '正治',
'shouji': '正治',
'shoji': '正治',
'KENKYUU': '建久',
'KENKYU': '建久',
'kenkyuu': '建久',
'kenkyu': '建久',
'BUNJI': '文治',
'bunji': '文治',
'GENRYAKU': '元暦',
'genryaku': '元暦',
'JUEI': '寿永',
'juei': '寿永',
'YOUWA': '養和',
'YOWA': '養和',
'youwa': '養和',
'yowa': '養和',
'JISHOU': '治承',
'JISHO': '治承',
'jishou': '治承',
'jisho': '治承',
'ANGEN': '安元',
'angen': '安元',
'JOUAN': '承安',
'JOAN': '承安',
'jouan': '承安',
'joan': '承安',
'KAOU': '嘉応',
'KAO': '嘉応',
'kaou': '嘉応',
'kao': '嘉応',
'NIAN': '仁安',
'nian': '仁安',
'EIMAN': '永万',
'eiman': '永万',
'CHOUKAN': '長寛',
'CHOKAN': '長寛',
'choukan': '長寛',
'chokan': '長寛',
'OUHOU': '応保',
'OHO': '応保',
'ouhou': '応保',
'oho': '応保',
'EIRYAKU': '永暦',
'eiryaku': '永暦',
'HEIJI': '平治',
'heiji': '平治',
'HOUGEN': '保元',
'HOGEN': '保元',
'hougen': '保元',
'hogen': '保元',
'KYUUJU': '久寿',
'kyuuju': '久寿',
'kyuju': '久寿',
'NINPEI': '仁平',
'ninpei': '仁平',
'KYUAN': '久安',
'kyuan': '久安',
'TENOU': '天養',
'TENO': '天養',
'tenou': '天養',
'teno': '天養',
'KOUJI': '康治',
'KOJI': '康治',
'kouji': '康治',
'koji': '康治',
'EIJI': '永治',
'eiji': '永治',
'HOUEN': '保延',
'HOEN': '保延',
'houen': '保延',
'hoen': '保延',
'CHOUSHOU': '長承',
'CHOSHO': '長承',
'choushou': '長承',
'chosho': '長承',
'TENSHOU': '天承',
'TENSHO': '天承',
'tenshou': '天承',
'tensho': '天承',
'DAIJI': '大治',
'daiji': '大治',
'TENJI': '天治',
'tenji': '天治',
'HOAN': '保安',
'hoan': '保安',
'GENEI': '元永',
'genei': '元永',
'EIKYUU': '永久',
'EIKYU': '永久',
'eikyuu': '永久',
'eikyu': '永久',
'TENNIN': '天仁',
'tennin': '天仁',
'KASHOU': '嘉承',
'KASHO': '嘉承',
'kashou': '嘉承',
'kasho': '嘉承',
'CHOUJI': '長治',
'CHOJI': '長治',
'chouji': '長治',
'choji': '長治',
'KOUWA': '康和',
'KOWA': '康和',
'kouwa': '康和',
'kowa': '康和',
'JOUTOKU': '承徳',
'JOTOKU': '承徳',
'joutoku': '承徳',
'jotoku': '承徳',
'EICHOU': '永長',
'EICHO': '永長',
'eichou': '永長',
'eicho': '永長',
'KAHOU': '嘉保',
'KAHO': '嘉保',
'kahou': '嘉保',
'kaho': '嘉保',
'KANJI': '寛治',
'kanji': '寛治',
'OUTOKU': '応徳',
'OTOKU': '応徳',
'outoku': '応徳',
'otoku': '応徳',
'EIHEI': '永保',
'eihei': '永保',
'JOURYAKU': '承暦',
'JORYAKU': '承暦',
'jouryaku': '承暦',
'joryaku': '承暦',
'SHOUHOU': '承保',
'SHOHO': '承保',
'shouhou': '承保',
'shoho': '承保',
'ENKYUU': '延久',
'ENKYU': '延久',
'enkyuu': '延久',
'enkyu': '延久',
'JIRYAKU': '治暦',
'jiryaku': '治暦',
'KOUHEI': '康平',
'KOHEI': '康平',
'kouhei': '康平',
'kohei': '康平',
'TENGI': '天喜',
'tengi': '天喜',
'EISHOU': '永承',
'EISHO': '永承',
'eishou': '永承',
'eisho': '永承',
'KANTOKU': '寛徳',
'kantoku': '寛徳',
'CHOUKYUU': '長久',
'CHOKYU': '長久',
'choukyuu': '長久',
'chokyu': '長久',
'CHOUREKI': '長暦',
'CHOREKI': '長暦',
'choureki': '長暦',
'choreki': '長暦',
'CHOUGEN': '長元',
'CHOGEN': '長元',
'chougen': '長元',
'chogen': '長元',
'MANJU': '万寿',
'manju': '万寿',
'JIAN': '治安',
'jian': '治安',
'KANNIN': '寛仁',
'kannin': '寛仁',
'CHOUWA': '長和',
'CHOWA': '長和',
'chouwa': '長和',
'chowa': '長和',
'KANKOU': '寛弘',
'KANKO': '寛弘',
'kankou': '寛弘',
'kanko': '寛弘',
'CHOUHOU': '長保',
'CHOHO': '長保',
'chouhou': '長保',
'choho': '長保',
'CHOUTOKU': '長徳',
'CHOTOKU': '長徳',
'choutoku': '長徳',
'chotoku': '長徳',
'SHOURYAKU': '正暦',
'SHORYAKU': '正暦',
'shouryaku': '正暦',
'shoryaku': '正暦',
'EISOU': '永祚',
'EISO': '永祚',
'eisou': '永祚',
'eiso': '永祚',
'EIEN': '永延',
'eien': '永延',
'KANWA': '寛和',
'kanwa': '寛和',
'EIKAN': '永観',
'eikan': '永観',
'TENGEN': '天元',
'tengen': '天元',
'TENEN': '天延',
'tenen': '天延',
'ANNA': '安和',
'anna': '安和',
'OUWA': '応和',
'OWA': '応和',
'ouwa': '応和',
'owa': '応和',
'TENRYAKU': '天暦',
'tenryaku': '天暦',
'TENKYOU': '天慶',
'TENKYO': '天慶',
'tenkyou': '天慶',
'tenkyo': '天慶',
'JOUGAN': '貞観',
'JOGAN': '貞観',
'jougan': '貞観',
'jogan': '貞観',
'NINJU': '仁寿',
'ninju': '仁寿',
'SAIKOU': '斉衡',
'SAIKO': '斉衡',
'saikou': '斉衡',
'saiko': '斉衡',
'KASHOU': '嘉祥',
'KASHO': '嘉祥',
'kashou': '嘉祥',
'kasho': '嘉祥',
'TENCHOU': '天長',
'TENCHO': '天長',
'tenchou': '天長',
'tencho': '天長',
'KOUNIN': '弘仁',
'KONIN': '弘仁',
'kounin': '弘仁',
'konin': '弘仁',
'DAIDOU': '大同',
'DAIDO': '大同',
'daidou': '大同',
'daido': '大同',
'ENRYAKU': '延暦',
'enryaku': '延暦',
'HOUKI': '宝亀',
'HOKI': '宝亀',
'houki': '宝亀',
'hoki': '宝亀',
'JINGOUKEIUN': '神護景雲',
'JINGOKEIUN': '神護景雲',
'jingoukeiun': '神護景雲',
'jingokeiun': '神護景雲',
'TENPYOUJINGO': '天平神護',
'TENPYOJINGO': '天平神護',
'tenpyoujingo': '天平神護',
'tenpyojingo': '天平神護',
'TENPYOUHOUJI': '天平宝字',
'TENPYOHOJI': '天平宝字',
'tenpyouhouji': '天平宝字',
'tenpyohoji': '天平宝字',
'TENPYOUSHOUHOU': '天平勝宝',
'TENPYOSHOHO': '天平勝宝',
'tenpyoushouhou': '天平勝宝',
'tenpyoshoho': '天平勝宝',
'TENPYOUKANPOU': '天平感宝',
'TENPYOKANPO': '天平感宝',
'tenpyoukanpou': '天平感宝',
'tenpyokanpo': '天平感宝',
'TENPYOU': '天平',
'TENPYO': '天平',
'tenpyou': '天平',
'tenpyo': '天平',
'JINKI': '神亀',
'jinki': '神亀',
'YOUROU': '養老',
'YORO': '養老',
'yourou': '養老',
'yoro': '養老',
'REIKI': '霊亀',
'reiki': '霊亀',
'WADOU': '和銅',
'WADO': '和銅',
'wadou': '和銅',
'wado': '和銅',
'KEIUN': '慶雲',
'keiun': '慶雲',
'TAIHOU': '大宝',
'TAIHO': '大宝',
'taihou': '大宝',
'taiho': '大宝',
'SHUCHOU': '朱鳥',
'SHUCHO': '朱鳥',
'shuchou': '朱鳥',
'shucho': '朱鳥',
'TENMU': '天武',
'tenmu': '天武',
'HAKUCHI': '白雉',
'hakuchi': '白雉',
'ASUKA': '飛鳥',
'asuka': '飛鳥'
}
@staticmethod
def normalize_era(era: str) -> str:
"""元号の正規化(頭文字からの変換含む)"""
if era in JapaneseEra.ERA_STARTS:
return era
# 入力文字列をそのまま確認
if era in JapaneseEra.ERA_INITIALS:
return JapaneseEra.ERA_INITIALS[era]
# 大文字に変換して確認
upper_era = era.upper()
if upper_era in JapaneseEra.ERA_INITIALS:
return JapaneseEra.ERA_INITIALS[upper_era]
raise ValueError(f"不正な元号です: {era}")
@staticmethod
def to_western_year(era: str, year: int) -> int:
normalized_era = JapaneseEra.normalize_era(era)
if normalized_era not in JapaneseEra.ERA_STARTS:
raise ValueError(f"不正な元号です: {era}")
return JapaneseEra.ERA_STARTS[normalized_era] + year - 1
@staticmethod
def to_japanese_era(year: int) -> tuple[str, int]:
for era, start_year in reversed(JapaneseEra.ERA_STARTS.items()):
if year >= start_year:
return era, year - start_year + 1
raise ValueError(f"対応する元号が見つかりません: {year}")
def main():
print("╭────────────────────────────────────╮")
print("│ 年号・西暦変換プログラムなのじゃ! │")
print("╰────────────────────────────────────╯")
while True:
print("\n1: 元号→西暦の変換")
print("2: 西暦→元号の変換")
print("3: プログラムを終了する")
choice = input("\n何をするのじゃ?(1-3を選ぶのじゃ): ")
if choice == "1":
print("\n元号を入力するのじゃ!")
print("(例:令和, R, 平成, H など イニシャルの対応は明治から令和のみで、それ以前はフルネームで入力するのじゃ!)")
era = input("元号: ")
try:
year = int(input("年数を入力するのじゃ(例:5): "))
result = JapaneseEra.to_western_year(era, year)
normalized_era = JapaneseEra.normalize_era(era)
print(f"\n{normalized_era}{year}年は西暦{result}年なのじゃ!")
except ValueError as e:
print(f"\nエラーなのじゃ! {e}")
elif choice == "2":
try:
year = int(input("\n西暦を入力するのじゃ(例:2023): "))
era, era_year = JapaneseEra.to_japanese_era(year)
print(f"\n西暦{year}年は{era}{era_year}年なのじゃ!")
except ValueError as e:
print(f"\nエラーなのじゃ! {e}")
elif choice == "3":
print("\nお疲れ様じゃった!また会おうのじゃ!(`・ω・´)ノ")
break
else:
print("\n1から3の数字を入力するのじゃ!")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment