ホームC言語Tips集日付・時刻 ≫ 暦時刻を地方時に変換する

C言語Tips集 - 暦時刻を地方時に変換する

C言語で暦時刻 (calendar time) を地方時 (local time) に変換するには,time.hlocaltime 関数を使用します.

localtime

#include <time.h>
struct tm *localtime(
    const time_t *timer
);

localtime 関数は,timer が指す暦時刻を地方時に変換し,tm 構造体に格納して,そのポインタを返す関数です.

localtime 関数は,暦時刻の変換に失敗した場合は空ポインタ (NULL)を返します.

tm 構造体

localtime 関数が返す tm 構造体は以下のような構造をしています.

メンバ意味
inttm_sec秒 (0 〜 60)
inttm_min分 (0 〜 59)
inttm_hour時 (0 〜 23)
inttm_mday日 (1 〜 31)
inttm_mon1 月からの月数 (0 〜 11)
inttm_year1900 年からの年数
inttm_wday日曜日からの日数 (0 〜 6)
inttm_yday1 月1 日からの日数 (0 〜 365)
inttm_isdst夏時間フラグ
夏時間を採用しているとき: 正
夏時間を採用していないとき: 0
この情報が得られないとき: 負

C言語サンプルプログラム

以下に localtime 関数を使用して暦時刻を地方時に変換するサンプルプログラムを示します.

/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* main */
int main(void) {
    time_t timer;
    struct tm *local;

    /* 現在時刻を取得 */
    timer = time(NULL);

    local = localtime(&timer); /* 地方時に変換 */

    /* 地方時 変換後表示 */
    printf("地方時: ");
    printf("%4d/", local->tm_year + 1900);
    printf("%2d/", local->tm_mon + 1);
    printf("%2d ", local->tm_mday);
    printf("%2d:", local->tm_hour);
    printf("%2d:", local->tm_min);
    printf("%2d", local->tm_sec);
    printf(" %d\n", local->tm_isdst);

    return EXIT_SUCCESS;
}

実行例

サンプルプログラムの実行結果は以下のようになります.

地方時: 2008/12/29 19: 4:11 0

※ 結果は実行環境により異なります.

Cプログラマの必読書

たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.

C実践プログラミング 第3版

C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります. オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.


C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.

日付・時刻の変換