C++学习笔记-时间相关函数总结
最近做一个日志相关的作业,由此注意到了时间相关的内容,首先用到的函数均包含在time.h头文件中。在使用C++开发时,包含头文件的命令时不需要带.h,这一点要注意,即正确的包含命令为#include<ctime>
在处理时间相关的操作时,首先会接触到time_t和tm结构,下面看一下相关的知识结构源码
struct tm
{
int tm_sec; // seconds after the minute - [0, 60] including leap second
int tm_min; // minutes after the hour - [0, 59]
int tm_hour; // hours since midnight - [0, 23]
int tm_mday; // day of the month - [1, 31]
int tm_mon; // months since January - [0, 11]
int tm_year; // years since 1900
int tm_wday; // days since Sunday - [0, 6]
int tm_yday; // days since January 1 - [0, 365]
int tm_isdst; // daylight savings time flag
};
typedef __time64_t time_t;//time_t实际上是一个整型的,值为相对于1970-01-01过去的秒数
typedef __int64 __time64_t;
在时间操作相关的函数中,有一些常用的函数的返回值就是经过的秒数,即以time_t为返回值类型的函数:
double difftime(time_t time1, time_t time0); //求两个时间之间经过的秒数
time_t mktime(struct tm * timeptr); //将tm类型的结果转换为从1970年1月1经过的秒数
time_t time(time_t * timer); //获得系统的当前时间
char * asctime(const struct tm * timeptr); //将结构中的信息转换为字符串的形式显示
char * ctime(const time_t *timer); //将time_t时间转换成string,string格式如下:星期 月份 天
时:分:秒 年份
在进行log文件处理时,我们经常会看到一些字符串,想要使用计算时间点的关系时,要先将其转换为相关的tm结构,然后转换为int类型的数字,在使用difftime()函数计算出两个时间点之间相差的秒数。在C++中通过使用<string>库中的atoi(str.c_str())函数将相应的字符串时间转换为相应的int数字,赋值给tm结构中的相关字段,此时得到的tm结构体是不能直接相减得出两个时间点之间相距的秒数的,此时可以借助localtime()将int秒数结果函数转换为tm结构体,然后调用mktime()在调用difftime()函数求解。如果得到的是tm结构体,则调用mktime()在调用difftime()函数求解经过的秒数。讲到localtime()函数就会想到gmtime()函数这两个函数的作用都是将int转换为tm结构表示,区别如下:
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
gmtime()函数是将日历时间转化为世界标准(格林尼治)时间,返回tm结构体来保存这个时间;而ocaltime()函数是将日历时间转化为本地时间。
上一篇: python操作mysql遇到的一些问题
下一篇: git和Linux遇到的一些问题