暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

C++中<ctime>时间库的使用

Cpp入门到精通 2024-04-17
194

点击蓝字

山月

关注我们

C++中ctime时间库的使用



我们在运行程序的时候经常需要处理时间问题,比如说在对程序进行性能优化时,经常需要测量各个部分的执行时间,以便找出关键点并进行优化,或者说当你需要定期备份数据,定时发送邮件时,使用时间处理功能编写定时任务,以及一些数据处理或日志记录等,都需要我们进行时间处理,提高软件的效率和可靠性。
在 C++ 中,处理时间的主要头文件是<ctime><chrono>



我们首先来介绍<ctime>头文件,该头文件提供了一些处理时间和日期的函数,它提供的主要是C风格的函数,我们写C++代码的时候更推荐使用<chrono>头文件提供的更现代化的时间处理功能。当然<ctime>并不是不能使用,注意<ctime>是c++中的头文件,只是它提供的函数是c风格的,也就是说在C语言中,<ctime>所对应的头文件是<time.h>,下面介绍到的函数在C语言中可以使用。

下面是一些<ctime>头文件中的常用的函数和数据类型:


1.time_t:这是一种数据类型,表示从特定时间点(通常是1970年1月1日,这是时间戳的起始时间,记住就好了,使用时间戳使得在不同的系统之间进行时间操作更加方便,并且能够在不同的平台上保持一致的时间表示。)到当前时刻所经过的秒数,它表示以秒为单位的整数。


2.time():这是一个用于获取当前日历时间的秒数的函数,原型如下:

    time_t time(time_t *timer);

    参数 timer 是一个指向 time_t 类型的指针,用于接收获取的时间值。如果 timer 不是空指针,则返回的时间值也会存储到 timer 指向的地址中。如果 timer 是空指针,则返回当前时间的时间戳。

    我们看这个例子:

      #include<iostream>
      using namespace std;
      #include<ctime>
      int main() {
      time_t nowtime = time(NULL);
      cout << nowtime << endl;
      return 0;
      }

      我们在这里使用了空指针,也就是说如果你只是想获取当前时间的时间戳而不需要将它存储到某个变量中,看一下结果显示:

        1713274765

        为什么给出了一串数字?这就要看time函数的概念,它返回的是秒数,是从1970年1月1日到程序运行时经过的秒数,我们如何转换成时间呢?需要用到下面这个函数:


        3.localtime()将time_t 类型的时间转换为本地时间的结构体表示。

          struct tm *localtime(const time_t *timer);

          我们使用这一函数将本地时间表示出来:

            #include<iostream>
            using namespace std;
            #include<ctime>
            int main() {
            time_t nowtime = time(NULL);
            tm* Time = localtime(&nowtime);
            cout << "Time:" << Time->tm_hour << ":" << Time->tm_min << ":"<<Time->tm_sec << endl;
            return 0;
            }

            这里的tm是定义在标准库头文件<ctime>中的,因此不需要显式定义该结构体。当你包含了<ctime>头文件后,编译器会自动识别tm结构体的定义,你可以直接使用它。我们可以看一下它的定义:

              struct tm {
              int tm_sec; // 秒(0-59)
              int tm_min; // 分钟(0-59)
              int tm_hour; // 小时(0-23)
              int tm_mday; // 一个月中的日期(1-31)
              int tm_mon; // 月份(0-11,0代表一月)
              int tm_year; // 自1900年起的年数
              int tm_wday; // 一周中的星期(0-6,0代表星期日)
              int tm_yday; // 一年中的天数(0-365,1月1日为0)
              int tm_isdst; // 夏令时标志(负数表示未定义,0表示不使用夏令时,正数表示使用夏令时)
              };

              知道了tm的定义后,我们看一下localtime函数的程序运行结果:

                Time:21:39:25

                4.gmtime():用于将 time_t 类型的时间转换为格林威治时间的 struct tm 结构体表示,而不是本地时间。(格林威治时间"(Greenwich Mean Time,简称 GMT)是以英国伦敦郊区的皇家格林尼治天文台的地方时为基准的时间标准,它是一个世界标准时间。)

                  #include<iostream>
                  using namespace std;
                  #include<ctime>
                  int main() {
                  time_t nowtime = time(NULL);
                    cout << nowtime << endl;
                  tm* GmTime = gmtime(&nowtime); // 转换为格林威治时间
                    cout << "GMT Time: " << Time->tm_hour << ":" << Time->tm_min << ":" << Time->tm_sec << endl;
                  return 0;
                  }

                  在这个示例中,首先获取了当前时间的时间戳 nowtime,然后调用 gmtime() 函数将时间戳转换为格林威治时间的结构体表示 GmTime,最后输出格林威治时间的小时、分钟和秒数。

                  结果如下:

                    1713275436
                    GMT Time: 13:50:36

                    5.asctime():用于将 struct tm 结构体表示的时间转换为一个 C 风格的字符串表示。它将时间格式化为以下形式的字符串:

                      "星期 月 日 时:分:秒 年\n"

                      我们看以下例子:

                        #include<iostream>
                        using namespace std;
                        #include<ctime>
                        int main() {
                        time_t nowtime = time(NULL);
                        cout << nowtime << endl;
                        tm* Time = localtime(&nowtime);
                        cout << "Time:" << Time->tm_hour << ":" << Time->tm_min << ":"<<Time->tm_sec << endl;
                        char* timestr = asctime(Time);
                        cout << timestr << endl;
                        return 0;
                        }

                        例子中我们首先获取了当前时间的时间戳 nowtime,然后调用 localtime() 函数将时间戳转换为本地时间的 struct tm 结构体表示 Time。接着,调用 asctime() 函数将 Time 转换为字符串,并将结果存储在 timestr 中,最后输出字符串表示的时间。

                        结果如下:

                          1713275533
                          Time:21:52:13
                          Tue Apr 16 21:52:13 2024

                          这节我们先介绍<ctime>的一些函数,下节我们继续学习时间库的其他内容,感谢观看!欢迎各位的点赞与关注!您的点赞和关注是我学习更新的动力!如有问题,可下方留言!



                          C++学习目录

                          C++基础知识

                          C++进阶知识

                          C++STL知识

                          • end • 

                          文章转载自Cpp入门到精通,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论