C++获取系统时间的三种方法

 更新时间:2024年09月12日 11:08:41   作者:Allen Roson  
在 C++ 编程中,获取系统时间是一项常见任务,无论是记录日志、计算程序运行时间,还是实现计时功能,都需要获取当前的系统时间,本文将介绍几种在 C++ 中获取系统时间的方法,并提供相应的代码示例,需要的朋友可以参考下

前言

在 C++ 编程中,获取系统时间是一项常见任务。无论是记录日志、计算程序运行时间,还是实现计时功能,都需要获取当前的系统时间。本文将介绍几种在 C++ 中获取系统时间的方法,并提供相应的代码示例。

1. 使用 C 标准库函数

C++ 兼容 C 标准库,因此可以使用 C 标准库中的 time.h 头文件来获取系统时间。

1.1 获取当前时间戳

#include <iostream>
#include <ctime>
 
int main() {
    // 获取当前时间戳
    time_t now = time(nullptr);
 
    // 将时间戳转换为本地时间
    tm* localTime = localtime(&now);
 
    // 输出当前时间
    std::cout << "当前时间: " << asctime(localTime);
 
    return 0;
}

代码解释:

  • time(nullptr) 返回当前的 Unix 时间戳,即从 1970 年 1 月 1 日 00:00:00 UTC 到现在的秒数。
  • localtime(&now) 将时间戳转换为本地时间结构体 tm。
  • asctime(localTime) 将 tm 结构体转换为可读的字符串格式。

1.2 获取特定时间格式

#include <iostream>
#include <ctime>
 
int main() {
    // 获取当前时间戳
    time_t now = time(nullptr);
 
    // 将时间戳转换为本地时间
    tm* localTime = localtime(&now);
 
    // 格式化输出时间
    char buffer[80];
    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localTime);
 
    std::cout << "当前时间: " << buffer << std::endl;
 
    return 0;
}

代码解释:

  • strftime 函数用于将 tm 结构体格式化为指定格式的字符串。
  • %Y-%m-%d %H:%M:%S 是格式化字符串,表示年-月-日 时:分:秒。

2. 使用 C++11 标准库

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

#include <iostream>
#include <chrono>
#include <ctime>
 
int main() {
    // 获取当前时间点
    auto now = std::chrono::system_clock::now();
 
    // 将时间点转换为时间戳
    std::time_t now_c = std::chrono::system_clock::to_time_t(now);
 
    // 将时间戳转换为本地时间
    tm* localTime = std::localtime(&now_c);
 
    // 输出当前时间
    std::cout << "当前时间: " << std::put_time(localTime, "%Y-%m-%d %H:%M:%S") << std::endl;
 
    return 0;
}

代码解释:

  • std::chrono::system_clock::now() 获取当前时间点。
  • std::chrono::system_clock::to_time_t(now) 将时间点转换为时间戳。
  • std::localtime(&now_c) 将时间戳转换为本地时间结构体 tm
  • std::put_time(localTime, "%Y-%m-%d %H:%M:%S") 将 tm 结构体格式化为指定格式的字符串。

2.1 计算时间差

#include <iostream>
#include <chrono>
 
int main() {
    // 获取开始时间点
    auto start = std::chrono::high_resolution_clock::now();
 
    // 模拟一些耗时操作
    std::this_thread::sleep_for(std::chrono::seconds(2));
 
    // 获取结束时间点
    auto end = std::chrono::high_resolution_clock::now();
 
    // 计算时间差
    std::chrono::duration<double> diff = end - start;
 
    // 输出时间差
    std::cout << "耗时: " << diff.count() << " 秒" << std::endl;
 
    return 0;
}

代码解释:

  • std::chrono::high_resolution_clock::now() 获取当前时间点。
  • std::this_thread::sleep_for(std::chrono::seconds(2)) 模拟 2 秒的耗时操作。
  • std::chrono::duration<double> diff = end - start 计算时间差。
  • diff.count() 返回时间差的秒数。

3. 使用 Boost 库

Boost 是一个功能强大的 C++ 库集合,提供了许多高级功能,包括时间处理。

#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
 
int main() {
    // 获取当前时间
    boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
 
    // 输出当前时间
    std::cout << "当前时间: " << now << std::endl;
 
    return 0;
}

代码解释:

  • boost::posix_time::second_clock::local_time() 获取当前本地时间。
  • now 是一个 boost::posix_time::ptime 对象,表示时间点。

总结

本文介绍了三种在 C++ 中获取系统时间的方法:

  • C 标准库函数:简单易用,但功能有限。
  • C++11 <chrono> 库:现代、灵活,适合复杂的时间处理需求。
  • Boost 库:功能强大,适合需要高级时间处理功能的场景。

到此这篇关于C++获取系统时间的三种方法的文章就介绍到这了,更多相关C++获取系统时间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Qt图片绘图类之QPixmap/QImage/QPicture详解

    Qt图片绘图类之QPixmap/QImage/QPicture详解

    这篇文章主要为大家详细介绍了Qt图片绘图类中QPixmap、QImage和QPicture的使用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-03-03
  • C++11-20 常量表达式的使用

    C++11-20 常量表达式的使用

    本文主要介绍了C++11-20常量表达式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C语言深入探索浮点数的使用秘密

    C语言深入探索浮点数的使用秘密

    在C语言中,浮点数是一个很重要的类型,浮点数可以使数据更为精确。浮点数说白了就是带有小数点的数。比如1.6 0.0000 765.2等等,浮点数具体是怎么用的呢,让我们一起来看看
    2022-04-04
  • C++实现简单的图书管理系统

    C++实现简单的图书管理系统

    本文给大家分享的是使用C++实现简单的图书管理系统的代码,本系统采用了面向对象的程序设计方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • 枚举和宏的区别详细解析

    枚举和宏的区别详细解析

    枚举常量具有类型,但宏没有类型,枚举变量具有与普通变量相同的诸如作用域、值等性质,但宏没有,宏不是语言的一部分,它是一种预处理替换符
    2013-09-09
  • C++实现LRU缓存的操作方法

    C++实现LRU缓存的操作方法

    LRU是一种常用的缓存淘汰策略,主要目的是在缓存空间有限的情况下,优先淘汰那些最长时间没有被访问的数据项,这篇文章主要介绍了C++实现LRU缓存,需要的朋友可以参考下
    2024-07-07
  • C++ 设置和获取当前工作路径的实现代码

    C++ 设置和获取当前工作路径的实现代码

    这篇文章主要介绍了C++ 设置和获取当前工作路径的实现代码,防止DLL加载不到配置和文件,需要的朋友可以参考下
    2017-09-09
  • C++ 获取当前正在运行函数的名称

    C++ 获取当前正在运行函数的名称

    本文主要介绍了C++获取当前正在运行函数的名称,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • C/C++的全缓冲、行缓冲和无缓冲

    C/C++的全缓冲、行缓冲和无缓冲

    这篇文章主要介绍了C/C++的全缓冲、行缓冲和无缓冲的相关知识,帮助大家更好的理解和学习c/c++,感兴趣的朋友可以了解下
    2020-08-08
  • C语言结构体成员赋值的深拷贝与浅拷贝详解

    C语言结构体成员赋值的深拷贝与浅拷贝详解

    C语言中的浅拷贝是指在拷贝过程中,对于指针型成员变量只拷贝指针本身,而不拷贝指针所指向的目标,它按字节复制的。深拷贝除了拷贝其成员本身的值之外,还拷贝成员指向的动态内存区域内容。本文将通过示例和大家详细说说C语言的深拷贝与浅拷贝,希望对你有所帮助
    2022-09-09

最新评论