文章目录

  • ​​C++ | C++日期&时间​​
  • ​​时间/日期相关的函数:​​
  • ​​实例1:​​
  • ​​实例2:​​
  • ​​实例3:​​
  • ​​实例4:​​

C++ | C++日期&时间

C++ 标准库没有提供所谓的日期类型。C++ 继承了 C 语言用于日期和时间操作的结构和函数。

为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 ​​<ctime>​​ 头文件。

有四个与时间相关的类型:clock_t、time_t、size_ttm。类型 ​​clock_t​​​、​​size_t​​​ 和 ​​time_t​​ 能够把系统时间和日期表示为某种整数。

结构类型 tm 把日期和时间以 C 结构的形式保存,tm 结构的定义如下:

struct tm {
int tm_sec; /* seconds:秒,0~59 */
int tm_min; /* minutes:分,0~59 */
int tm_hour; /* hours:时,0~23 */
int tm_mday; /* day of the month:一个月中的第几天,1~31 */
int tm_mon; /* month:月份,0~11 */
int tm_year; /* year:年,从1900年算起 */
int tm_wday; /* day of the week:一周的第几天,0~6 */
int tm_yday; /* day in the year:一年的第几天,0~365 */
int tm_isdst; /* daylight saving time:夏令时 */
};

时间/日期相关的函数:

#include <time.h>

char *asctime(const struct tm *tm);
char *asctime_r(const struct tm *tm, char *buf);

char *ctime(const time_t *timep);
char *ctime_r(const time_t *timep, char *buf);

struct tm *gmtime(const time_t *timep);
struct tm *gmtime_r(const time_t *timep, struct tm *result);

struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);

time_t mktime(struct tm *tm);

clock_t clock(void);

double difftime(time_t time1, time_t time0);

size_t strftime(char *s, size_t max, const char *format,
const struct tm *tm);

实例1:

/*******************************************************************
* > File Name: time.cpp
* > Create Time: 2021年09月 2日 9:11:44
******************************************************************/
#include <iostream>
#include <ctime>
using namespace std;

int main(void)
{
time_t now = time(NULL);
cout << "now: " << now << "seconeds.\n"; // 距离1970/01/01的秒数

cout << "ctime: " << ctime(&now) ; // 转换成本地时间的字符串

struct tm *gmtm;
gmtm = gmtime(&now);
cout << "asctime: " << asctime(gmtm); // 转换成GMT时间的字符串

return 0;
}

编译、运行:

PS E:\fly-prj\cplusplus\day4> make 
g++ -o time time.cpp -g -Wall
PS E:\fly-prj\cplusplus\day4> .\time.exe
now: 1630550825seconeds.
ctime: Thu Sep 2 10:47:05 2021
asctime: Thu Sep 2 02:47:05 2021

实例2:

/*******************************************************************
* > File Name: clock.cpp
* > Create Time: 2021年09月 2日 10:13:42
******************************************************************/
#include <iostream>
#include <ctime>
using namespace std;

int main(void)
{
clock_t start_time, end_time;
double total_t;

start_time = clock();
for(int i = 0; i < 10000000; i ++) /* 大循环 */
{

}
end_time = clock();
cout << "start_time: " << start_time << endl; /* 开始时间 */
cout << "end_time: " << end_time << endl; /* 结束时间 */

total_t = (double)(end_time - start_time)/CLOCKS_PER_SEC;
cout << "total_t: " << total_t << endl; /* CPU占用时间 */
cout << "CLOCKS_PER_SEC: " << CLOCKS_PER_SEC << endl;

return 0;
}

编译、运行:

PS E:\fly-prj\cplusplus\day4> make 
g++ -o clock clock.cpp -g -Wall
PS E:\fly-prj\cplusplus\day4> .\clock.exe
start_time: 31
end_time: 46
total_t: 0.015
CLOCKS_PER_SEC: 1000

实例3:

/*******************************************************************
* > File Name: difftime.cpp
* > Create Time: 2021年09月 2日 10:22:39
******************************************************************/
#include <iostream>
#include <ctime>
#include <unistd.h>
using namespace std;

int main(void)
{
time_t startTime;
time_t endTime;
double totalTime;

startTime = time(NULL); /* 开始时间 */
sleep(5);
endTime = time(NULL); /* 结束时间 */
//totalTime = (double)(endTime - startTime);
totalTime = difftime(endTime, startTime); /* 花费时间 */
cout << "startTime: " << startTime << endl;
cout << "endTime: " << endTime << endl;
cout << "totalTime: " << totalTime << endl;

return 0;
}

编译、运行:

PS E:\fly-prj\cplusplus\day4> make   
g++ -o difftime difftime.cpp -g -Wall
PS E:\fly-prj\cplusplus\day4> .\difftime.exe
startTime: 1630551304
endTime: 1630551309
totalTime: 5

实例4:

/*******************************************************************
* > File Name: strftime.cpp
* > Create Time: 2021年09月 2日 10:36:44
******************************************************************/
#include <iostream>
#include <ctime>
using namespace std;

int main(void)
{
time_t tm;
struct tm *pinfo;
char buf[80];

tm = time(NULL); /* 获取当前时间 */
pinfo = localtime(&tm); /* 转换成时间结构体 */
strftime(buf, 80, "%Y-%m-%d %H:%M:%S", pinfo); /* 输出特定格式的时间 */
cout << "buf: " << buf << endl;

return 0;
}

编译、运行:

PS E:\fly-prj\cplusplus\day4> make 
g++ -o strftime strftime.cpp -g -Wall
PS E:\fly-prj\cplusplus\day4> .\strftime.exe
buf: 2021-09-02 10:59:39