C++时间处理(总结)

1.介绍

        C++中,处理时间的相关功能主要依赖于C标准库(如<ctime>)和C++11引入的<chrono>库。下面将详细介绍其相关用法。

2.用法

(1)C标准库(<ctime>)

        C++继承了C语言的时间处理函数,定义在<ctime>头文件中。常用的函数和类型包括:

        1.常用类型

        time_t: 表示时间的数据类型,通常是一个整数。(从1970年1月1日00:00:00 UTC 到现在的秒数,即Unix时间戳)。

        struct tm: 表示分解后的时间。(年、月、日、时、分、秒等)。

        2.常用函数

        time_t time(time_t* arg)

        获取当前时间戳,存储在arg中。例如

#include <iostream>
#include <ctime>

int main() {
    time_t now = time(nullptr);
    std::cout << "当前时间戳: " << now << std::endl;
    return 0;
}

         struct tm *localtime(const time_t *timep):

        将时间戳转换为本地时间(struct tm)。例如

#include <iostream>
#include <ctime>

int main() {
    time_t now = time(nullptr);
    struct tm *local_time = localtime(&now);

    std::cout << "本地时间: " << local_time->tm_year + 1900 << "-"
              << local_time->tm_mon + 1 << "-"
              << local_time->tm_mday << " "
              << local_time->tm_hour << ":"
              << local_time->tm_min << ":"
              << local_time->tm_sec << std::endl;
    return 0;
}

        char *asctime(const struct tm *tm):

        将struct tm转化为可读的字符串格式。例如

#include <iostream>
#include <ctime>

int main() {
    time_t now = time(nullptr);
    struct tm *local_time = localtime(&now);
    std::cout << "可读时间: " << asctime(local_time);
    return 0;
}

        char *ctime(const time_t *timep):

        将时间戳转化为可读的字符串格式。例如

#include <iostream>
#include <ctime>

int main() {
    time_t now = time(nullptr);
    std::cout << "可读时间: " << ctime(&now);
    return 0;
}

(2)C++11(<chrono>)

        C++11引入了<chrono>库,提供了更现代、更灵活的时间处理功能。

        1.常用类型

        std::chrono::system_clock:系统时钟,表示当前的日历时间。

        std::chrono::steady_clock:稳定时钟,适用于测量时间间隔。

        std::chrono::high_resolution_clock:高精度时钟(可能是system_clock)或(steady_clock的别名)。

        2.常用函数

        获取当前时间。使用system_clock::now()获取当前时间点。例如

#include <iostream>
#include <chrono>

int main() {
    auto now = std::chrono::system_clock::now();
    std::time_t now_time = std::chrono::system_clock::to_time_t(now);
    std::cout << "当前时间: " << std::ctime(&now_time);
    return 0;
}

        时间间隔。使用 std::chrono::duration表示时间间隔。例如

#include <iostream>
#include <chrono>
#include <thread>

int main() {
    auto start = std::chrono::steady_clock::now();
    std::this_thread::sleep_for(std::chrono::seconds(2)); // 休眠 2 秒
    auto end = std::chrono::steady_clock::now();

    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::cout << "耗时: " << duration.count() << " 毫秒" << std::endl;
    return 0;
}

        时间点转换。使用 std::chrono::system_clock::to_time_t。将时间点转换为time_t。例如

#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 << "当前时间: " << std::ctime(&now_time);
    return 0;
}

(3)C++20(<chrono>)扩展

        C++20对<chrono>进行了扩展,引入了日历和时区支持。例如:

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;

    // 获取当前时间点
    auto now = system_clock::now();

    // 转换为日历日期
    auto today = floor<days>(now);
    year_month_day ymd{today};

    std::cout << "今天的日期: " << ymd.year() << "-"
              << static_cast<unsigned>(ymd.month()) << "-"
              << static_cast<unsigned>(ymd.day()) << std::endl;

    return 0;
}
3.总结
  • C 标准库 <ctime>: 适合简单的日期和时间操作。

  • C++11 <chrono>: 提供了更现代、更灵活的时间处理功能,适合高精度计时和时间点操作。

  • C++20 <chrono>: 扩展了日历和时区支持,适合复杂的日期和时间操作。

如有错误,敬请指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值