“時間”和“日期”的概念
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 時區名稱,如果不能得到時區名稱則返回空字符.%% 百分號
關係圖