int YMDhms2s(int
Y, int M, int
D, int h, int
m, int s) {
int y = Y -
1970;
int res =
0;
while(y
> 0) {
if ((y
% 4) == 0 && (y % 100) != 0 || (y % 400) == 0) {
res += 31622400;
} else
{
res += 31536000;
}
y--;
}
switch(M -
1)
{
case(12): {
res += 2678400; }
case(11): {
res += 2592000; }
case(10): {
res += 2678400; }
case( 9): {
res += 2592000; }
case( 8): {
res += 2678400; }
case( 7): {
res += 2678400; }
case( 6): {
res += 2592000; }
case( 5): {
res += 2678400; }
case( 4): {
res += 2592000; }
case( 3): {
res += 2678400; }
case( 2): {
if ((Y
% 4) == 0 && (Y % 100) != 0 || (Y % 400) == 0) {
res += 2505600;
} else
{
res += 2419200; }
}
case( 1): {
res += 2678400; }
default : {
break; }
}
res += (D - 1) * 86400;
res += h * 3600;
res += m * 60;
res += s;
return(res);
}
まずは年を秒に変換します
めんどくさいのでwhileを使いましたが
すっげー遅くなるので本来は使うべきではない
次に月を秒に変換しますが
ここは
1. 1ヶ月の長さがまちまち
2. 2月は閏年を考慮する必要がある
という理由により
switchを使っています
そして日 時 分 秒をそれぞれ計算していきます
流れとしては非常に簡単
一応正常に動いてるっぽいので 大丈夫なはずです
なお閏年判定のコードはwikipediaから拝借しました
このコードはUNIXtimeに変換するものですが
定数の変更でNTPtimeも対応可能なはずです
前にUNIXtimeを文字列に変換する関数もおいてるので
それと組み合わせれば色々と遊べます
まぁ組み込みとかの内の一部用途でしか使い道無いんですが
一応32bitだと2100年くらいまで処理できるので
しばらくの間は大丈夫だと思います