C言語で暦時刻 (calendar time) を協定世界時 (UTC) に変換するには,time.h の gmtime 関数を使用します.
#include <time.h>
struct tm *gmtime( const time_t *timer );
gmtime 関数は,timer が指す暦時刻を協定世界時 (UTC) に変換し,tm 構造体に格納して,そのポインタを返す関数です.
gmtime 関数は,暦時刻の変換に失敗した場合は空ポインタ (NULL)を返します.
gmtime 関数が返す tm 構造体は以下のような構造をしています.
型 | メンバ | 意味 |
---|---|---|
int | tm_sec | 秒 (0 ~ 60) |
int | tm_min | 分 (0 ~ 59) |
int | tm_hour | 時 (0 ~ 23) |
int | tm_mday | 日 (1 ~ 31) |
int | tm_mon | 1 月からの月数 (0 ~ 11) |
int | tm_year | 1900 年からの年数 |
int | tm_wday | 日曜日からの日数 (0 ~ 6) |
int | tm_yday | 1 月1 日からの日数 (0 ~ 365) |
int | tm_isdst | 夏時間フラグ 夏時間を採用しているとき: 正 夏時間を採用していないとき: 0 この情報が得られないとき: 負 |
以下に gmtime 関数を使用して暦時刻を協定世界時 (UTC) に変換するサンプルプログラムを示します.
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* main */
int main(void) {
time_t timer;
struct tm *utc;
/* 現在時刻を取得 */
timer = time(NULL);
utc = gmtime(&timer); /* 協定世界時(UTC)に変換 */
/* 協定世界時 変換後表示 */
printf("協定世界時: ");
printf("%4d/", utc->tm_year + 1900);
printf("%2d/", utc->tm_mon + 1);
printf("%2d ", utc->tm_mday);
printf("%2d:", utc->tm_hour);
printf("%2d:", utc->tm_min);
printf("%2d", utc->tm_sec);
printf(" %d\n", utc->tm_isdst);
return EXIT_SUCCESS;
}
サンプルプログラムの実行結果は以下のようになります.
協定世界時: 2008/12/29 10: 4:11 0
※ 結果は実行環境により異なります.
たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.
C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります.
オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.
ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.