目录

一、前言

二、C++中的时间处理

2.1.C++时间处理概述

2.2. C风格时间操作

2.1 time()函数

2.2 ctime()和asctime()

 2.3 localtime()和gmtime()

三.C++11及以后的现代时间库

3.1 库简介

3.2 使用system_clock

3.3 时间间隔的测量

 四、总结


一、前言

        在C++编程中,对系统时间的操作是一项基本而重要的技能。无论是用于日志记录、性能度量还是与实际世界事件的同步,正确地处理时间数据都是至关重要的今天我们将详细介绍C++中处理系统时间的各种方法,包括传统的时间操作函数和现代C++中推荐的方式,帮助大家吃透这个知识点。

二、C++中的时间处理

2.1.C++时间处理概述

        在深入具体的函数之前,我们首先需要理解C++中时间的基本概念。C++标准库提供了多种方式来获取和操作时间,主要可以分为以下几类:

C风格时间操作

C++11及以后的现代时间库

2.2. C风格时间操作

        C++为了保持与C语言的兼容,继承了C语言中的时间处理函数。这些函数包含在<ctime>头文件中。

2.1 time()函数

        time()函数是最基本的时间获取函数,它提供了自公元1970年1月1日(即Unix纪元)以来的秒数。

#include <ctime>
#include <iostream>

int main() {
    time_t now = time(0);
    std::cout << "Seconds since January 1, 1970: " << now << std::endl;
    return 0;
}

2.2 ctime()和asctime()

        ctime()函数接收一个time_t值,返回一个表示本地时间的字符串。asctime()函数则接收一个指向tm结构的指针,返回一个易于阅读的字符串。

#include <ctime>
#include <iostream>

int main() {
    time_t now = time(0);
    std::cout << "Local time: " << ctime(&now) << std::endl;

    struct tm *timeinfo;
    timeinfo = localtime(&now);
    std::cout << "Readable time: " << asctime(timeinfo) << std::endl;
    return 0;
}

 2.3 localtime()和gmtime()

        localtime()函数将time_t值转换为本地时间的tm结构,而gmtime()则转换为UTC时间。

#include <ctime>
#include <iostream>

int main() {
    time_t now = time(0);
    struct tm *gmt = gmtime(&now);
    std::cout << "UTC time and date: " << asctime(gmt) << std::endl;
    
    struct tm *localt = localtime(&now);
    std::cout << "Local time and date: " << asctime(localt) << std::endl;
    return 0;
}

三.C++11及以后的现代时间库

        从C++11开始,标准库引入了更加强大和灵活的时间库,包括<chrono>库,提供了高精度的时间点和持续时间的处理能力。

3.1 <chrono>库简介

        <chrono>库定义了三种主要的时间类型:时间点(time points)、持续时间(durations)和时钟(clocks)。时钟有三种类型:system_clock、steady_clock和high_resolution_clock。

3.2 使用system_clock

        system_clock是用于实际的日历时间,我们可以通过它获取当前时间,并转换为人类可读的格式。

#include <iostream>
#include <chrono>
#include <ctime>

int main() {
    auto now = std::chrono::system_clock::now();
    std::time_t now_time = std::chrono::system_clock::to_time_t(now);
    std::cout << "Current time: " << std::ctime(&now_time) << std::endl;
    return 0;
}

3.3 时间间隔的测量

        使用<chrono>库可以方便地测量代码段的执行时间。

#include <chrono>
#include <iostream>

int main() {
    auto start = std::chrono::high_resolution_clock::now();
    
    // 执行一些操作
    for (int i = 0; i < 1000000; ++i) {
        // Do nothing
    }
    
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> elapsed = end - start;
    std::cout << "Elapsed time: " << elapsed.count() << " seconds." << std::endl;
    return 0;
}

 四、总结

        通过使用C++标准库中的时间处理功能,无论是传统的C风格函数还是C++11引入的<chrono>库,开发者都可以精确地控制和测量时间。现代C++的时间库提供了更大的灵活性和精度,是进行时间相关操作的推荐方法,最后,希望这篇文章对大家了解和使用C++时间函数能有所帮助。

 参考:

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐