C 庫 time
1:函式time(),返回從(1970-01-01 00:00:00 UTC)起經過的時間,單位秒;
time_t seconds; time(&seconds); //或者 time_t tm_seconds = time(NULL);
2:struct tm 是儲存時間和日期的結構,定義如下:
struct tm { int tm_sec; // seconds after the minute - [0, 60] including leap second int tm_min; // minutes after the hour - [0, 59] int tm_hour; //hours since midnight - [0, 23] int tm_mday; // day of the month - [1, 31] int tm_mon; // months since January - [0, 11] int tm_year; // years since 1900 int tm_wday; // days since Sunday - [0, 6] int tm_yday; // days since January 1 - [0, 365] int tm_isdst; // daylight savings time flag};
3:asctime() 返回一個可讀日期的字串
struct tm *tm_struct; char *date= asctime(tm_struct);
4:函式localtime()struct tm *localtime(const time_t *timer) 將timer秒轉化為本地時間的struct tm的結構體,
time_t seconds; time(&seconds); struct tm *tm_ptr; tm_ptr = localtime(&seconds); char *now_date = asctime(tm_ptr); //Thu Oct 15 16:49:12 2020printf("%s", now_date);
5:ctime() 獲取到的時間(秒)轉化為一個可讀日期的字串char *ctime(const time_t *timer)
time_t seconds; time(&seconds); char *date_c = ctime(&seconds); //Thu Oct 15 17:22:01 2020 printf("%s", date_c);
6:函式difftime() double difftime(time_t time1, time_t time2) 返回倆個時間(time1-time2)相差的秒
time_t start; time_t end; double interval = difftime(end,start);
7:gmtime 與localtime不同的是 gmtime得到是協調世界時(UTC)也被稱為格林尼治標準時間(GMT)
time_t seconds; time(&seconds); struct tm tm_info ; gmtime_s(&tm_info,&seconds); printf("倫敦:%2d:%02d\n", (tm_info.tm_hour + 1) % 24, tm_info.tm_min); printf("中國:%2d:%02d\n", (tm_info.tm_hour + 8) % 24, tm_info.tm_min);
8:mktime():time_t mktime(struct tm *time) 把struct tm的結構轉換為一個依據本地時區的 時間值(s)。
struct tm tm_info; time_t currrent_t = mktime(&tm_info);
9:strftime(buffer, 80, "%Y-%m-%d %H:%M:%S ", tm_ptr); 將struct tm按照一定格式輸出進buffer
strftime(buffer, 80, "%x %X %p %A %B %U %c", tm_ptr); printf(" date = %s", buffer);%a 星期幾的簡寫 %A 星期幾的全稱 %b 月份的簡寫 %B 月份的全稱 %c 標準的日期的時間串 %C 年份的後兩位數字 %d 十進位制表示的每月的第幾天 %D 月/天/年 %e 在兩字元域中,十進位制表示的每月的第幾天 %F 年-月-日 %g 年份的後兩位數字,使用基於周的年 %G 年份,使用基於周的年 %h 簡寫的月份名 %H24小時制的小時 %I 12小時制的小時 %j 十進位制表示的每年的第幾天 %m 十進位制表示的月份 %M 十時製表示的分鐘數 %n 新行符 %p 本地的AM或PM的等價顯示 %r 12小時的時間 %R 顯示小時和分鐘:hh:mm %S 十進位制的秒數 %t 水平製表符 %T 顯示時分秒:hh:mm:ss %u 每週的第幾天,星期一為第一天 (值從0到6,星期一為0) %U 第年的第幾周,把星期日作為第一天(值從0到53) %V 每年的第幾周,使用基於周的年 %w 十進位制表示的星期幾(值從0到6,星期天為0) %W 每年的第幾周,把星期一做為第一天(值從0到53) %x 標準的日期串 %X 標準的時間串 %y 不帶世紀的十進位制年份(值從0到99) %Y 帶世紀部分的十制年份 %z,%Z 時區名稱,如果不能得到時區名稱則返回空字元。 %% 百分號 10:clock_t clock(void) 獲取處理器時鐘所需的時間,為了獲得秒數除以CLOCKS_PER_SEC
clock_t start_t, end_t; double total_t; int i; start_t = clock(); for (i = 0; i < 10000000; i++) { } end_t = clock(); total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC; printf("CPU 佔用的總時間:%f\n", total_t);
11:結構體timespec
struct timespec { time_t tv_sec; // Seconds - >= 0 long tv_nsec; // Nanoseconds - [0, 999999999] };
12:timespec_get獲取自1970-01-01 00:00:00 UTC的時間填充timespec結構 ,timespec_get(struct timespec *ts,int base);
struct tm *tm_ptr; struct timespec ts; char buffer[256] = { 0 }; timespec_get(&ts,TIME_UTC); tm_ptr=localtime(&ts.tv_sec); strftime(buffer, 80, "%Y-%m-%d %H:%M:%S ", tm_ptr);
13:_get_tzname()檢索時區名稱或夏令時標準時區名稱 (DST) 的字串表示形式
enum TZINDEX { STD, DST }; size_t tznameSize = 0; char *tznameBuffer =NULL; _get_tzname(&tznameSize, NULL, 0, DST); tznameBuffer = (char*)malloc(tznameSize); if (_get_tzname(&tznameSize, tznameBuffer, tznameSize, DST)==0) { printf("%s ", tznameBuffer); }
14:_get_timezone()協調世界時 (UTC) 和當地時間之間的差異(以秒為單位)。
long zone; _get_timezone(&zone);
15:_get_daylight( int* hours )夏令時偏移量小時
int hours; _get_daylight(&hours);
16 :_get_dstbias( int* seconds );夏令時偏移量秒