和暦の算出


関数名
wareki  西暦年からその年の和暦を算出する
形式
int wareki(char *nengou, int year);
引数
nengou  (出力)和暦の年号を示す ASCIZ文字列
year    (入力)西暦年
関数値
和暦年。変換できなかったときは -1
注意事項
奈良時代(西暦708年)以降が変換可能

用例(wareki-test.c
char nengou[10];
wareki(nengou, 1961);

プログラム(wareki.c
int wareki(char *nengou, int year)
{
    int i;
    typedef struct {
        int y;         /* 西暦年 */
        char *w;       /* 和暦年号 */
    } TBL;
    static TBL tbl[] = {
        {708,"和銅"},{715,"霊亀"},{717,"養老"},{724,"神亀"},
        {729,"天平"},{749,"天平勝宝"},{757,"天平宝字"},{765,"天平神護"},
        {767,"神護景雲"},{770,"宝亀"},{781,"天応"},{782,"延暦"},
        {807,"大同"},{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,"元徳"},
        {1331,"元弘"},{1334,"建武"},{1336,"延元"},{1340,"興国"},
        {1346,"正平"},{1370,"建徳"},{1372,"文中"},{1375,"天授"},
        {1381,"弘和"},{1384,"元中"},{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,"平成"},
        {9999,""}};

    if (year < tbl[0].y || year >= 9999) return -1;
    for (i = 0; ; i++)
        if (tbl[i].y <= year && year < tbl[i+1].y) break;
    strcpy(nengou, tbl[i].w);
    return year - tbl[i].y + 1;
}
説明
正確に和暦に変換するには、日にちまで指定しないと できないので、参考程度と理解して利用して下さい。

関連関数