当前位置: 首页 > news >正文

使用 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.2 计算时间差

 

#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++ 中获取系统时间的方法:

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【EI稳定,马来亚大学主办】2024年计算机与信息安全国际会议(WCCIS 2024,9月27-29)
  • 第67期 | GPTSecurity周报
  • 本地安装Ollama+WebUI
  • 基于Linux文件编程实现处理Excel表格的数据
  • 《深入理解 Java 中的继承与方法重写》
  • JavaScript 中 new Function() 和 new function() 的区别
  • 51. 数组中的逆序对
  • HTML中的文字与分区标记
  • Docker高级管理之compose容器编排与私有仓库的部署
  • UE5 对象池
  • 【研赛论文】数学建模2024华为杯论文word/latex模板
  • 希捷,AI时代的存储“破壁者”
  • R语言数据整理和分析(1)
  • 对接开源大模型应用开发平台最佳实践
  • B3635 硬币问题
  • 2017前端实习生面试总结
  • 4. 路由到控制器 - Laravel从零开始教程
  • canvas 五子棋游戏
  • input实现文字超出省略号功能
  • JavaScript-Array类型
  • mysql中InnoDB引擎中页的概念
  • node入门
  • Spring框架之我见(三)——IOC、AOP
  • Vue 重置组件到初始状态
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 给初学者:JavaScript 中数组操作注意点
  • 观察者模式实现非直接耦合
  • 汉诺塔算法
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 物联网链路协议
  • 协程
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • elasticsearch-head插件安装
  • postgresql行列转换函数
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #nginx配置案例
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (5)STL算法之复制
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十一)图像的罗伯特梯度锐化
  • (四)Linux Shell编程——输入输出重定向
  • (算法)前K大的和
  • (五)activiti-modeler 编辑器初步优化
  • (一)appium-desktop定位元素原理
  • (转)fock函数详解
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃