こんにちは、もがちゃんです。
前回のtimeの使い方に続いて、C言語で現在日時を扱う際に良く使用するlocaltimeの使い方を簡単なサンプルプログラムとともに説明します。
目次
localtimeの構文
#include <time.h>
struct tm *localtime(const time_t *timer);
localtimeの説明
localtimeは、timerが指す現在日時をローカル時間に変換します。
localtime関数は、timerが指す暦時刻を、地方時で表した要素別の時刻に変換する。
JISX3010 プログラム言語C
timer
ローカル時間に変換する現在日時情報のポインタを指定します。
(timeで取得した情報へのポインタを指定します。)
返却値
ローカル時間への変換が
成功した場合、変換結果(ローカル時間情報)へのポインタを返す。
失敗した場合、NULLポインタを返す。
struct tm
struct tmの構造は、以下のようになっています。
struct tm {
int tm_sec; /* 秒(0~59) */
int tm_min; /* 分(0~59) */
int tm_hour; /* 時(0~59) */
int tm_mday; /* 日(1~31) */
int tm_mon; /* 月(0~11) */
int tm_year; /* 1900年からの年 */
int tm_wday; /* 日曜日からの日数(0~6) */
int tm_yday; /* 1月1日からの日数(0~365) */
int tm_isdst; /* 夏時間フラグ(採用:>0,不採用:0,不明:<0) */
};
localtimeの使い方サンプル
現在日時をlocaltimeで変換した結果を表示する簡単なサンプルプログラムとその実行結果を紹介します。
サンプルプログラムとその実行結果
#include <stdio.h>
#include <time.h>
int main(void) {
//timer == NULL指定時
time_t timer = time(NULL);
fprintf(stdout, "timer(NULL):%ld\n", timer);
struct tm *tm = localtime(&timer);
if(tm != NULL) {
fprintf(stdout, "tm->tm_year [%d]\n" , tm->tm_year);
fprintf(stdout, "tm->tm_mon [%d]\n" , tm->tm_mon);
fprintf(stdout, "tm->tm_mday [%d]\n" , tm->tm_mday);
fprintf(stdout, "tm->tm_hour [%d]\n" , tm->tm_hour);
fprintf(stdout, "tm->tm_min [%d]\n" , tm->tm_min);
fprintf(stdout, "tm->tm_sec [%d]\n" , tm->tm_sec);
fprintf(stdout, "tm->tm_wday [%d]\n" , tm->tm_wday);
fprintf(stdout, "tm->tm_yday [%d]\n" , tm->tm_yday);
fprintf(stdout, "tm->tm_isdst[%d]\n" , tm->tm_isdst);
} else {
fprintf(stdout, "localtime error\n");
}
}
localtimeの使い方まとめ
- timeで取得した現在日時情報をローカル時間(現地時間)に変換したい場合にlocaltimeを使用する
- localtimeで変換した結果は、struct tmのポインタで返却される。
- struct tmの年情報(tm_year)は、1900年からの年
- struct tmの月情報(tm_mon)は、0(1月)~11(12月)
- struct tmの曜日情報(tm_wday)は、0(日曜日)~6(土曜日)