C++ 標准庫沒有提供所謂的日期類型。C++ 繼承了 C 語言用於日期和時間操作的結構和函數。為了使用日期和時間相關的函數和結構,需要在 C++ 程序中引用 <ctime> 頭文件
time.h 頭文件定義了四個變量類型、兩個宏
四個變量類型:
size_t | 是無符號整數類型,它是 sizeof 關鍵字的結果。 |
---|---|
clock_t | 這是一個適合存儲處理器時間的類型,類型為unsigned long |
time_t | 這是一個適合存儲日歷時間類型。unsigned long類型 |
struct tm | 這是一個用來保存時間和日期的結構 |
tm 結構的定義如下:
struct tm
{
int tm_sec; /* 秒,范圍從 0 到 59 */
int tm_min; /* 分,范圍從 0 到 59 */
int tm_hour; /* 小時,范圍從 0 到 23 */
int tm_mday; /* 一月中的第幾天,范圍從 1 到 31 */
int tm_mon; /* 月,范圍從 0 到 11(注意) */
int tm_year; /* 自 1900 年起的年數 */
int tm_wday; /* 一周中的第幾天,范圍從 0 到 6 */
int tm_yday; /* 一年中的第幾天,范圍從 0 到 365 */
int tm_isdst; /* 夏令時 */
};
兩個宏:
NULL | 這個宏是一個空指針常量的值。 |
---|---|
CLOCKS_PER_SEC | 這個宏表示每秒的處理器時鍾個數。用於將clock()函數的結果轉化為以秒為單位的量,這個量的具體值是與操作系統相關的,通常為1000 |
#include <iostream> #include<ctime> using namespace std; int main() { clock_t start, finish; //定義兩個處理器時鍾變量 double total = 0; int i = 0; start = clock(); //讀取時間 //該函數返回程序執行起(一般為程序的開頭),處理器時鍾所使用的時間。如果時間不可用,則返回 -1 //為了獲取 CPU 所使用的秒數,您需要除以 CLOCKS_PER_SEC //在 32 位系統中,CLOCKS_PER_SEC 等於 1000000,該函數大約每 72 分鍾會返回相同的值 for (; i < 100000000; ++i) { //do someting; } finish = clock(); total = (double)(finish - start) / CLOCKS_PER_SEC;//將時間轉換為秒 //printf("CPU 占用的總時間:%f\n", total_t); cout << total << endl; return 0; }
time_t seconds; //創建日歷時間對象 seconds = time(NULL); //返回時間--格式一
//time(&seconds); //返回時間--格式二
//當參數為NULL時,得到當前日歷時間(從1970-01-01 00:00:00到現在的秒數)
time_t timer; timer = time(NULL); char stime[30]; ctime_s(stime, sizeof stime, &timer); //將日歷時間參數timer轉換為字符串 //返回字符串格式:星期,月,日,小時:分:秒,年 cout << stime << endl; system("pause"); //暫停 //需要#include<stdlib.h>
time_t timer; time(&timer); struct tm* Now = new tm(); //創建日期時間結構變量指針 localtime_s(Now, &timer); //使用timer的值來填充tm結構 cout << Now->tm_hour << endl; cout << Now->tm_min << endl;
time_t timer; time(&timer); struct tm Now; localtime_s(&Now, &timer); char str[32]; asctime_s(str, &Now);//將結構tm*所表示的時間轉換為字符串 //返回的時間字符串格式為:星期,月,日,小時:分:秒,年 cout << str << endl;
time_t first, second; time(&first); Sleep(2000); time(&second); double a = difftime(second, first); //返回兩次time_t的時間差 //單位:秒 cout << a << endl;
time_t timer; tm info; time(&timer); gmtime_s(&info ,&timer); //獲取時間 //得到以結構tm表示的時間信息,並用格林威治標准時間表示 //格林威治標准時間(Greenwich Mean Time,GMT),中國內地的時間與UTC得時差為+8,也即UTC+8,美國為UTC-5
time_t timer,timer1; tm info; time(&timer); gmtime_s(&info ,&timer); timer1 = mktime(&info); //把tm*的時間格式轉換為time_t格式的時間
#include <iostream> #include<ctime> using namespace std; int main() { time_t timer; tm info; char buf[80]; time(&timer); localtime_s(&info, &timer); strftime(buf, 80, "%Y年%m月%e日_%H時%M分%S秒", &info);//按照指定的格式輸出為字符串 //參數1:char* 用來保存字符串 //參數2:寫到參數1中的最多字節數 //參數3:格式 //參數4:tm* //以年月日_時分秒的形式表示當前時間 /*format如下:它們是區分大小寫的。 %a 星期幾的簡寫 %A 星期幾的全稱 %b 月分的簡寫 %B 月份的全稱 %c 標准的日期的時間串 %C 年份的后兩位數字 %d 十進制表示的每月的第幾天 %D 月/天/年 %e 在兩字符域中,十進制表示的每月的第幾天 %F 年-月-日 %g 年份的后兩位數字,使用基於周的年 %G 年分,使用基於周的年 %h 簡寫的月份名 %H 24小時制的小時 %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 時區名稱,如果不能得到時區名稱則返回空字符。 %% 百分號 */ cout << buf << endl; return 0; }