西暦→元号変換プログラム
コンピューターが扱う時間
コンピューターで時間はビットで表されます。
32bitコンピューターでは2038年にオーバーフローしてしまうため、2038年問題と呼ばれています。
なので、コンピューターが一番扱いやすい時間は西暦ではなく1と0で表されるビットです。
C言語の場合
C言語の場合はtime_t型を使って時間を扱うことができます。
#include <stdio.h>
#include <time.h>
int main(void){
time_t t; //time_t型の変数tを宣言
time(&t); //tに現在時刻を代入
printf("%ld\n", t); //tを表示
return 0;
}
例えば、このプログラムをコンパイルして実行すると、コンピューターで扱っている数値(10進数)が表示されます。
time_tは1秒ごとに1増加するので、1秒ごとに実行すると値が変わっていることがわかります。
西暦を元号にしたい場合は、time_t型で比較すれば簡単にできます。
元号の構造体を作る
struct gengo{
int y;
int m;
int d;
char gengo[7];
};
元号の構造体を作ります。
元号の構造体の配列を作る
struct gengo g[5] = {
{1868, 1, 25, "明治"},
{1912, 7, 30, "大正"},
{1926, 12, 25, "昭和"},
{1989, 1, 8, "平成"},
{2019, 5, 1, "令和"},
};
元号の構造体の配列を作ります。
配列をループして比較
元号の配列をループして、西暦をうまくtime_tに入れていきます。
変換したい時間をtime_tい入れます。
比較します。
という条件に一致すれば、元号が確定します。
また、令和以降は次の元号が存在しないため、別の処理を行います。
年の計算
年は、西暦 - 元号の始まった年 + 1でわかります。
元号の配列のインデックス(添字)が確定しているはずなので、簡単に取り出せるはずです。
おわり。