C++ 標準庫沒有提供所謂的日期型別。C++ 繼承了 C 語言用於日期和時間操作的結構和函數。爲了使用日期和時間相關的函數和結構,需要在 C++ 程式中參照 標頭檔案。
有四個與時間相關的型別:clock_t、time_t、size_t 和 tm。型別 clock_t、size_t 和 time_t 能夠把系統時間和日期表示爲某種整數。
結構型別 tm 把日期和時間以 C 結構的形式儲存,tm 結構的定義如下:
struct tm {
int tm_sec; // 秒,正常範圍從 0 到 59,但允許至 61
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,從 1 月 1 日算起
int tm_isdst; // 夏令時
}
C 庫函數 time_t time(time_t *seconds) 返回自紀元 Epoch(1970-01-01 00:00:00 UTC)起經過的時間,以秒爲單位。如果 seconds 不爲空,則返回值也儲存在變數 seconds 中。
#include <stdio.h>
#include <time.h>
int main ()
{
time_t seconds;
seconds = time(NULL);
printf("自 1970-01-01 起的小時數 = %ld\n", seconds/3600);
return(0);
}
每個函數的具體用法請參考菜鳥教學:https://www.runoob.com/cplusplus/cpp-date-time.html
使用例子如下:
#include <iostream>
#include <ctime>
using namespace std;
int main( )
{
// 基於當前系統的當前日期/時間
time_t now = time(0);
// 把 now 轉換爲字串形式
char* dt = ctime(&now);
cout << "本地日期和時間:" << dt << endl;
// 把 now 轉換爲 tm 結構
tm *gmtm = gmtime(&now);
dt = asctime(gmtm);
cout << "UTC 日期和時間:"<< dt << endl;
tm *ltm = localtime(&now);
// 輸出 tm 結構的各個組成部分
cout << "年: "<< 1900 + ltm->tm_year << endl;
cout << "月: "<< 1 + ltm->tm_mon<< endl;
cout << "日: "<< ltm->tm_mday << endl;
cout << "時間: "<< ltm->tm_hour << ":";
cout << ltm->tm_min << ":";
cout << ltm->tm_sec << endl;
}
輸出如下:
本地日期和時間:Sat Jan 8 20:07:41 2011
UTC 日期和時間:Sun Jan 9 03:07:41 2011
1970 到目前時間:1503564157
年: 2017
月: 8
日: 24
時間: 16:42:37