#include <stdio.h>
#include <string.h>
#include <time.h>
void display(struct tm *ptimeinfo)
{
printf("%d-%d-%d %d:%d:%d\n", ptimeinfo->tm_year + 1900, ptimeinfo->tm_mon + 1, ptimeinfo->tm_mday, ptimeinfo->tm_hour, ptimeinfo->tm_min, ptimeinfo->tm_sec);
printf("Day of week: %d\n", ptimeinfo->tm_wday);
}
void fun(void)
{
char *arr[] = {"日", "一", "二", "三", "四", "五", "六"}; // tm_wday為0表示星期日
struct tm info;
memset(&info, 0, sizeof(info)); // 將所有成員的值設為0
info.tm_year = 2013 - 1900; // 年份必須減去1900
info.tm_mon = 6 - 1; // 月份必須減1
info.tm_mday = 13;
mktime(&info);
printf("\n2013年6月13日是星期%s\n", arr[info.tm_wday]);
}
void fun2(void)
{
time_t t, now;
struct tm info;
double d;
char str[100];
memset(&info, 0, sizeof(info));
info.tm_year = 2016 - 1900;
info.tm_mon = 5 - 1;
info.tm_mday = 11;
t = mktime(&info);
time(&now);
d = difftime(now, t);
printf("d = %lf\n", d);
printf("now - t = %d\n", now - t);
strftime(str, sizeof(str), "%Y-%m-%d %H:%M:%S", &info);
puts(str);
}
int main(void)
{
struct tm timeinfo; // 時間信息結構
struct tm *ptimeinfo;
time_t rawtime; // 時間戳整數
clock_t clk;
memset(&timeinfo, 0, sizeof(timeinfo)); // 成員變數全部置為0
timeinfo.tm_year = 115; // 2015年
timeinfo.tm_mon = 8; // 9月
timeinfo.tm_mday = 15; // 15日
timeinfo.tm_wday = 5; // 賦一個錯誤的星期數據: 星期五
printf("%s", asctime(&timeinfo)); // asctime會輸出錯誤的星期數
// 注意返回的字元串末尾有換行符, 所以不能直接用puts輸出
rawtime = mktime(&timeinfo); // mktime是localtime的反函數
printf("修正後的星期數: %d\n", timeinfo.tm_wday); // mktime會把結構體中錯誤的數據修正
printf("%s", ctime(&rawtime)); // ctime可以輸出正確的星期數
puts("\nUTC+8 Time: ");
rawtime += 27895;
ptimeinfo = localtime(&rawtime);
display(ptimeinfo);
puts("\nUTC Time: ");
ptimeinfo = gmtime(&rawtime);
display(ptimeinfo);
// 獲得當前時間
time(&rawtime); // 另一種寫法: rawtime = time(NULL);
ptimeinfo = localtime(&rawtime);
puts("\n當前時間: ");
display(ptimeinfo);
fun();
clk = clock();
printf("clk = %d\n", clk);
fun2();
return 0;
}