時刻であれこれサンプル

ソース(CP932) timeSample.c

#include <stdio.h>
#include <time.h>
#include <locale.h>

int main(void) {
	// 現在時刻を取得して文字列に変換
	time_t timer; // time_tの正体はただの整数1970/1/1からの経過秒数が設定される
	struct tm *date; // 時刻を人間に分かる形で表す構造体
 
	// 現在時刻を取得
	timer = time(NULL );
	// 現在時刻を構造体に変換
	date = localtime(&timer);
	// mktime 構造体からtime_tに変換もできます
	timer = mktime(date);
 
	// strftime関数
	// 1. yyyy/MM/dd HH:mm:ss形式
	char str[30], str2[30];
	strftime(str, 24, "%Y/%m/%d %H:%M:%S", date);
	printf("1 %s\n", str);
 
	// 2. yyyy/MM/dd 曜日 HH:mm:ss形式
	// setlocale(LC_ALL, "JPN");が効いているので「火」って出る
	strftime(str, 24, "%Y/%m/%d %a %H:%M:%S", date);
	printf("2 %s\n", str);
 
	// 曜日の漢字を手動で入れてみよう
	char *pYoubi[] = { "(日)", "(月)", "(火)", "(水)", "(木)", "(金)", "(土)" };
	char *pYoubi2[] = { "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日" };
 
	// 3. yyyy/MM/dd (曜日) HH:mm:ss形式
	// 曜日の入るところに%sを仕込む
	strftime(str, 24, "%Y/%m/%d %%s %H:%M:%S", date);
	// sprintfで%sに曜日を仕込む
	sprintf(str2, str, pYoubi[date->tm_wday]);
	// ワイド文字の出力はprintf
	printf("3 %s\n", str2);
 
	// printfでもやってみよう
	// 4. yyyy/MM/dd HH:mm:ss形式
	printf("4 %d/%02d/%02d %02d:%02d:%02d\n", date->tm_year + 1900,
			date->tm_mon + 1, date->tm_mday, date->tm_hour, date->tm_min,
			date->tm_sec);
	// 5. yyyy/MM/dd (曜日) HH:mm:ss形式
	printf("5 %d/%02d/%02d %s %02d:%02d:%02d\n", date->tm_year + 1900,
			date->tm_mon + 1, date->tm_mday, pYoubi[date->tm_wday],
			date->tm_hour, date->tm_min, date->tm_sec);
 
	// 6. yyyy/MM/dd n曜日 HH:mm:ss形式
	// 曜日の入るところに%sを仕込む
	strftime(str, 24, "%Y/%m/%d %%s %H:%M:%S", date);
	// sprintfで%sに曜日を仕込む
	sprintf(str2, str, pYoubi2[date->tm_wday]);
	// ワイド文字の出力はprintf
	printf("6 %s\n", str2);
 
	return 0;
}
 

実行結果

1 2012/08/08 17:26:06
2 2012/08/08 Wed 17:26:06
3 2012/08/08 (水) 17:26:06
4 2012/08/08 17:26:06
5 2012/08/08 (水) 17:26:06
6 2012/08/08 水曜日 17:26:06
 

ideone


ワイド文字バージョン ソース(UTF-8) timeWSample.c

#include <stdio.h>
#include <time.h>
#include <wchar.h>
#include <locale.h>
#include <stdlib.h>
 
int main(void) {
	// 日本語を扱う場合はロケールを設定しないとおかしくなる
	setlocale(LC_ALL, "JPN");
 
	// 現在時刻を取得して文字列に変換
	time_t timer; // time_tの正体はただの整数1970/1/1からの経過秒数が設定される
	struct tm *date; // 時刻を人間に分かる形で表す構造体
 
	// 現在時刻を取得
	timer = time(NULL );
	// 現在時刻を構造体に変換
	date = localtime(&timer);
	// mktime 構造体からtime_tに変換もできます
	timer = mktime(date);
 
	// strftime関数
	// 1. yyyy/MM/dd HH:mm:ss形式
	char str[30];
	strftime(str, 24, "%Y/%m/%d %H:%M:%S", date);
	printf("1 %s\n", str);
 
	// 2. yyyy/MM/dd 曜日 HH:mm:ss形式
	// setlocale(LC_ALL, "JPN");が効いているので「火」って出る
	strftime(str, 24, "%Y/%m/%d %a %H:%M:%S", date);
	printf("2 %s\n", str);
 
	// 曜日の漢字を手動で入れてみよう
	wchar_t *pYoubi[] =
			{ L"(日)", L"(月)", L"(火)", L"(水)", L"(木)", L"(金)", L"(土)" };
	wchar_t *pYoubi2[] = { L"日曜日", L"月曜日", L"火曜日", L"水曜日", L"木曜日", L"金曜日",
			L"土曜日" };
	wchar_t wstr[30], wstr2[30];
 
	// 3. yyyy/MM/dd (曜日) HH:mm:ss形式
	// 曜日の入るところに%sを仕込む
	strftime(str, 24, "%Y/%m/%d %%s %H:%M:%S", date);
	// マルチバイトからワイド文字へ変換
	mbstowcs(wstr, str, 24);
	// swprintfで%sに曜日を仕込む
	swprintf(wstr2, wstr, pYoubi[date->tm_wday]);
	// ワイド文字の出力はwprintf
	wprintf(L"3 %s\n", wstr2);
 
	// ワイド文字からマルチバイトに変換して出力してみる
	wcstombs(str, wstr2, 26);
	printf("3 %s\n", str);
 
	// printfでもやってみよう
	// 4. yyyy/MM/dd HH:mm:ss形式
	printf("4 %d/%02d/%02d %02d:%02d:%02d\n", date->tm_year + 1900,
			date->tm_mon + 1, date->tm_mday, date->tm_hour, date->tm_min,
			date->tm_sec);
	// 5. yyyy/MM/dd (曜日) HH:mm:ss形式
	wprintf(L"5 %d/%02d/%02d %s %02d:%02d:%02d\n", date->tm_year + 1900,
			date->tm_mon + 1, date->tm_mday, pYoubi[date->tm_wday],
			date->tm_hour, date->tm_min, date->tm_sec);
 
	// 6. yyyy/MM/dd n曜日 HH:mm:ss形式
	// 曜日の入るところに%sを仕込む
	strftime(str, 24, "%Y/%m/%d %%s %H:%M:%S", date);
	// マルチバイトからワイド文字へ変換
	mbstowcs(wstr, str, 24);
	// swprintfで%sに曜日を仕込む
	swprintf(wstr2, wstr, pYoubi2[date->tm_wday]);
	// ワイド文字の出力はwprintf
	wprintf(L"6 %s\n", wstr2);
 
	return 0;
}
 

実行結果

1 2012/08/07 14:44:31
2 2012/08/0714:44:31
3 2012/08/07 (火) 14:44:31
3 2012/08/07 (火) 14:44:31
4 2012/08/07 14:44:31
5 2012/08/07 (火) 14:44:31
6 2012/08/07 火曜日 14:44:31
 

codepad


添付ファイル