(X)HTML の ins 要素や del 要素の datetime 属性。これに指定する日時を生成する C 言語ソース。ブロックの途中での変数の宣言など、少しだけ C++ のルールを使ってます。
最近、 C 言語の勉強を始めましたが、 HSP に出来ない便利な書き方やルールがあっていいですね。
// HTML の datetime 属性 に指定する日時を表示する
// Author: FUJI
// Update: 2007/8/8
#include <stdio.h>
#include <time.h>
int main(void) {
// 現在時刻を取得
time_t timer;
time( &timer );
// 現在時刻からローカルタイムとグリニッジ標準タイムに変換
tm lt = *localtime( &timer );
tm gt = *gmtime( &timer );
// グリニッジ標準タイムとの時差を取得
int diff = (int)difftime( mktime( < ), mktime( > ) ) / 60;
char diffSgn;
if( diff < 0 ) {
diffSgn = '-';
diff = -diff;
} else {
diffSgn = '+';
}
// 時差からタイムゾーン文字列を作成
char tzd[7];
sprintf( tzd, ( diff == 0 ) ? "Z"
: "%c%02d:%02d", diffSgn, diff / 60, diff % 60 );
// 表示
printf( "%04d-%02d-%02dT%02d:%02d:%02d%s\n",
lt.tm_year + 1900, lt.tm_mon + 1, lt.tm_mday,
lt.tm_hour, lt.tm_min, lt.tm_sec, tzd );
return 0;
}
タイムゾーンがおかしくなるバグがありました。グリニッジ標準タイムとローカルタイムの日付が違う場合に、タイムゾーンがおかしくなります。(時刻しか参照していなかったので)直す予定です。
上記のバグを修正しました。修正したのは次の部分です。
int diff = ( lt.tm_hour * 60 + lt.tm_min ) - ( gt.tm_hour * 60 + gt.tm_min );
これを次のように変更しました。
int diff = (int)difftime( mktime( < ), mktime( > ) ) / 60;