推薦資料:cppreference(中文),cppreference(英文)
“時間”和“日期”的概念
Coordinated Universal Time(UTC):
協調世界時,又稱為世界標准時間,也就是大家所熟知的格林威治標准時間(Greenwich Mean Time,GMT).比如,中國內地的時間與UTC的時差為+8,也就是UTC+8.美國是UTC-5
Calendar Time:
日歷時間:是用“從一個標准時間點到此時的時間經過的秒數”來表示的時間.這個標准時間點對不同的編譯器來說會有所不同,但對一個編譯系統來說,這個標准時間點是不變的,該編譯系統中的時間對應的日歷時間都通過該標准時間點來衡量,所以可以說日歷時間是“相對時間”,但是無論你在哪一個
時區,在同一時刻對同一個標准時間點來說,日歷時間都是一樣的.epoch:時間點時間點在標准C/C++中是一個整數,它用此時的時間和標准時間點相差的秒
數(即日歷時間)來表示
clock tick:
時鍾計時單元(而不把它叫做時鍾滴答次數),一個時鍾計時單元的時間長短是由 CPU 控制的.一個 clock tick 不是C PU 的一個時鍾周期,而是C/C++的一個基本計時單位.
重要的宏
CLOCKS_PER_SEC
說明:每秒鍾的滴答數
定義:
#define CLOCKS_PER_SEC ((clock_t) 000)
用途:它用來表示一秒鍾會有多少個時鍾計時單元
clock_t
說明:滴答計數類型
定義:
#ifndef _CLOCK_T_DEFINED typedef long clock_t; #define _CLOCK_T_DEFINED #endif
注意:其中clock_t是用來保存時間的數據類型
time_t
說明:日歷時間的秒計數
定義:
#ifndef __TIME_T #define __TIME_T /* 避免重復定義 time_t */ typedef long time_t; /* 時間值time_t 為長整型的別名*/ #endif
注意:對time_t數據類型的值來說,它所表示的時間不能晚於2038年 月 8日 9時 4分07秒.
重要數據類型
struct tm
說明:年月日等得細分時間數據結構
struct tm{ int tm_sec; /* Seconds. [0-60] ( leap second) */ int tm_min; /* Minutes. [0-59] */ int tm_hour; /* Hours. [0-23] */ int tm_mday; /* Day. [ -3 ] */ int tm_mon; /* Month. [0- ] */ int tm_year; /* Year - 900. */ int tm_wday; /* Day of week. [0-6] */ int tm_yday; /* Days in year.[0-365] */ int tm_isdst; /* DST. [- /0/ ]*/ #ifdef __USE_BSDlong int tm_gmtoff; /* Seconds east of UTC. */ __const char *tm_zone; /* Timezone abbreviation. */ #elselong int __tm_gmtoff; /* Seconds east of UTC. */ __const char *__tm_zone; /* Timezone abbreviation. */ #endif };
函數
clock 函數
- 原型:clock_t clock( void );
- 作用:返回本程序自啟動來,流逝的時鍾計時單元.
difftime 函數
- 原型:double difftime( time_t timer ,time_t timer0 );
- 作用:返回兩個日歷時間之差timer -timer0;
time 函數
- 原型:time_t time( time_t *timer );
- 作用:獲取機子的時間
- 注意:如果,timer不為空,則同時將返回值賦給timer指向的變量.
mktime 函數
- 原型:time_t mktime(struct tm *timeptr );
- 作用:將由年月日時分秒等構成的細分時間轉換為流逝秒數構成的日歷時間.
localtime 函數
- 原型:struct tm *localtime(const time_t *timer);
- 作用:將日歷時間轉換為本地細分時間
gmtime函數
- 原型:struct tm *gmtime( const time_t *timer);
- 作用:將日歷時間轉換為UTC(世界協調時間)的細分時間
- 注意:localtime與gmtime,前者比后者多8個小時
asctime函數
- 原型:char *asctime( const struct tm *timeptr );
- 作用:將細分時間轉換為簡寫字符串
ctime函數
- 原型:char *ctime( const time_t *timer );
- 作用:將日歷時間轉換為簡寫字符串
strftime函數
- 原型:size_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr );
- 作用:將細分時間按format的格式要求格式化到strDest指向的緩沖區
函數strftime()的操作有些類似於sprintf():識別以百分號(%)開始的格式命令集合,格式化輸出結果放在一個字符串中.格式化命令說明串strDest中各種日期和時間信息的確切表示方法.格式串中的其他字符原樣放進串中.格式命令列在下面,它們是區分大小寫的.
- %a 星期幾的簡寫
- %A 星期幾的全稱
- %b 月分的簡寫
- %B 月份的全稱
- %c 標准的日期的時間串
- %C 年份的后兩位數字
- %d 十進制表示的每月的第幾天
- %D 月/天/年
- %e 在兩字符域中,十進制表示的每月的第幾天
- %F 年-月-日
- %g 年份的后兩位數字,使用基於周的年
- %G 年分,使用基於周的年
- %h 簡寫的月份名
- %H 24小時制的小時
- %I 2小時制的小時
- %j 十進制表示的每年的第幾天
- %m 十進制表示的月份
- %M 十時制表示的分鍾數
- %n 新行符
- %p 本地的AM或PM的等價顯示
- %r 2小時的時間
- %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 時區名稱,如果不能得到時區名稱則返回空字符.%% 百分號