すごくメモ帳

すごくほぼメモ帳ぐらいなブログ

西暦→元号変換プログラム

コンピューターが扱う時間

コンピューターで時間はビットで表されます。

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でわかります。

元号の配列のインデックス(添字)が確定しているはずなので、簡単に取り出せるはずです。

 

おわり。