HTML の datetime 属性を現在時刻から生成

(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( &lt ), mktime( &gt ) ) / 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( &lt ), mktime( &gt ) ) / 60;

インフォメーション

公開日時
2007年8月6日 午後7時7分55秒
最終更新日時
2007年9月9日 午後6時39分39秒
カテゴリ
C/C++