欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++学习笔记-时间相关函数总结

程序员文章站 2024-01-27 08:06:28
...

最近做一个日志相关的作业,由此注意到了时间相关的内容,首先用到的函数均包含在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()函数是将日历时间转化为本地时间。

参考的博客:http://www.cnblogs.com/shrimp-can/p/6721970.html