一、time_t别名
time_t
用来表示时间类型,它是long
的别名,在<time.h>
中定义,表示从1970年1月1日到现在的秒数。- 声明一个时间类型的变量:
long tt
或者time_t tt
(推荐后一种写法)
二、time()库函数
time()
库函数用于获取操作系统当前的时间- 包含头文件:
<time.h>
- 声明:
time_t time(time_t *tloc)
- 调用方法:
time_t now = time(0);
将空地址传给time()
,并将返回值赋给now
或
time_t now; time(&now);
将变量now
的地址作为参数传递给time()
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
time_t now = time(0);
long now1;
time(&now1);
cout << "now: " << now << endl;
cout << "now1: " << now1 << endl;
return 0;
}
三、tm结构体
time_t
是一个长整数,不符合人类的使用习惯,需要转换成tm结构体,tm结构体在<time.h>
中声明,如下:
struct tm
{
int tm_year;
int tm_mon;
int tm_mday;
int tm_hour;
int tm_min;
int tm_sec;
int tm_wday;
int tm_yday;
int tm_isdst;
};
四、localtime()库函数
localtime()
函数用于把time_t
表示的时间转换为tm
结构体表示的时间。localtime()
函数不是线程安全的,localtime_r()
是线程安全的。- 头文件:
<time.h>
- 函数声明:
struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);
- 示例:
#include <iostream>
#include <cstring>
#include <time.h>
using namespace std;
int main()
{
time_t now = time(0);
cout << "now: " << now << endl;
tm tmnow;
localtime_r(&now, &tmnow);
string time_str = to_string(tmnow.tm_year + 1900) + '-'
+ to_string(tmnow.tm_mon + 1) + '-'
+ to_string(tmnow.tm_mday) + '-'
+ to_string(tmnow.tm_hour) + '-'
+ to_string(tmnow.tm_min) + '-'
+ to_string(tmnow.tm_sec);
cout << time_str << endl;
return 0;
}
五、mktime()库函数
mktime()
函数的功能与localtime()
函数相反,用于把tm
结构体时间转换为time_t
时间。- 包含头文件:
<time.h>
- 函数声明:
time_t mktime(struct tm *tm);
- 该函数主要用于时间的运算,例如:把
2022-02-28 23:42:25
加30
分钟。 - 思路:
1)解析字符串格式的时间,转换成tm
结构体;
2)用mktime()
函数把tm
结构体转换成time_t
时间;
3)把time_t
时间加30*60
秒;
4)用localtime_r()
函数把time_t
时间转换成tm
结构体;
5)把tm
结构体转换成字符串。
六、程序睡眠
- 如果需要把程序挂起一段时间,可以使用
sleep()
和usleep()
两个库函数。 - 包含头文件:
<unistd.h>
- 函数声明:
单位是秒:unsigned int sleep(unsigned int seconds);
单位是微秒:int usleep(useconds_t usec);
- 示例:
#include <iostream>
#include <cstring>
#include <unistd.h>
using namespace std;
int main()
{
for (int i = 0; i < 10; i ++ )
{
sleep(1);
cout << i << endl;
}
return 0;
}