c++中如何获取系统当前时间_c++获取当前日期时间


现代C++推荐用std::chrono::system_clock::now()获取高精度时间点,精度达纳秒或微秒;需格式化时先转time_t再用std::put_time,毫秒级需手动拼接。

std::chrono 获取高精度当前时间点

现代 C++ 推荐用 std::chrono::system_clock::now() 获取当前时间点,它返回的是一个 time_point,精度通常为纳秒或微秒,且不依赖 C 风格的 time_t 转换开销。

  • 直接获取时间点:无需格式化,适合计时、差值计算等场景
  • 跨平台稳定:在 Windows、Linux、macOS 上行为一致
  • 注意:system_clock 可能不保证是单调时钟(如系统时间被手动调整会影响结果)
auto now = std::chrono::system_clock::now();
auto duration = now.time_since_epoch();
auto millis = std::chrono::duration_cast(duration).count();

std::put_time 格式化输出年月日时分秒

若需可读字符串(如 "2025-06-12 15:30:45"),必须先将 time_point 转为 std::time_t,再用 std::put_time 格式化。这是目前最简洁、类型安全的 C++11+ 方式。

  • 必须包含
  • std::gmtime 返回 UTC 时间;std::localtime 返回本地时区(但非线程安全)
  • 推荐用 std::localtime_s(MSVC)或 std::localtime_r(POSIX)替代 std::localtime 避免数据竞争
auto now = std::chrono::system_clock::now();
auto time_t = std::chrono::system_clock::to_time_t(now);
std::stringstream ss;
ss << std::put_time(std::localtime(&time_t), "%Y-%m-%d %H:%M:%S");
std::string datetime_str = ss.str(); // 如 "2024-06-12 15:30:45"

避免 ctime()asctime() 的陷阱

ctime(&t) 返回带换行符的 C 字符串(如 "Wed Jun 12 15:30:45 2025\n"),asctime() 同样不灵活且线程不安全。它们无法控制格式、不能去掉换行、也不支持毫秒级精度。

  • 返回的指针指向静态缓冲区,多次调用会相互覆盖
  • 格式固定,无法满足如 "20250612_153045" 或带毫秒的需求
  • 在多线程中直接使用极易引发未定义行为

需要毫秒/微秒字符串?自己拼接更可靠

std::put_time 不支持毫秒(%f 是 C23 扩展,主流编译器尚未普遍支持)。要输出带毫秒的时间字符串(如 "2025-06-12 15:30:45.123"),得手动拆解 time_point

立即学习“C++免费学习笔记(深入)”;

  • 先取整秒部分,转成 time_t 并格式化日期时间
  • 再用 duration_cast 提取毫秒数,补零到 3 位
  • 最后字符串拼接(避免 sprintf 类型不安全操作)
auto now = std::chrono::system_clock::now();
auto ms = std::chrono::duration_cast(now.time_since_epoch()) % 1000;
auto time_t = std::chrono::system_clock::to_time_t(now);
std::stringstream ss;
ss << std::put_time(std::localtime(&time_t), "%Y-%m-%d %H:%M:%S");
ss << '.' << std::setfill('0') << std::setw(3) << ms.count();
std::string datetime_ms = ss.str(); // "2024-06-12 15:30:45.123"
C++ 标准库的时间处理不是“调一个函数就完事”,关键在于区分「时间点」和「格式化字符串」两个阶段——前者用 chrono,后者绕不开 time_t + 线程安全的 localtime_r/localtime_s。毫秒拼接看似啰嗦,却是目前最可控的方式。


# linux  # windows  # mac  # c++  # macos  # win  # stream  # 格式化输出  # cos  # 标准库  # 字符串  # 指针  # 线程  # 多线程  # 再用  # 不安全  # 的是  # 这是  # 也不  # 却是  # 不支持  # 不开  # 能不  # 先将 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Windows11怎样开启游戏模式_Windows11游戏模式开启攻略【方法】  海外搜索引擎推广效果怎么样,怎么分析效果!  LINUX怎么设置系统语言_LINUX修改中文环境  Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系统【安全指南】  Win11任务栏怎么固定应用 Win11将软件图标固定到底部【步骤】  如何用::实现工具类方法调用_php静态工具类设计技巧【技巧】  Windows怎样拦截WPS弹窗广告_Windows拦截WPS弹窗广告设置【步骤】  如何在 Go 中调用动态链接库(.so)中的函数  如何使用Golang编写单元测试_创建Test函数验证业务逻辑  Win10怎么关闭自动更新错误重启 Win10策略禁止失败补丁强制重启【防护】  Win11怎么恢复出厂设置_Win11重置此电脑保留文件方法【详解】  Go 语言标准库为何不提供泛型 Contains 方法?  mac怎么安装pip_MAC Python pip安装工具与升级方法【详解】  如何在Golang中操作嵌套切片指针_Golang多维slice修改  Win11怎么看电池循环次数_Win11笔记本电池寿命检测【命令】  Mac的“预览”如何合并多个PDF_Mac文件处理技巧【效率】  如何使用Golang实现多重错误处理_Golangerror组合与判断方法  PHP cURL GET请求:正确设置请求头与身份认证的完整教程  Win11怎么关闭自动调节屏幕亮度_Windows11禁用内容自适应亮度控制  Win11开始菜单打不开_修复Windows 11点击开始图标无响应【教程】  TestNG的testng.xml配置文件怎么写  php485函数执行慢怎么优化_php485性能提升小技巧【技巧】  Windows10系统怎么查看已安装更新_Win10控制面板卸载补丁  php删除数据怎么清空表_truncate与delete区别及用法【汇总】  Windows如何设置登录时的欢迎屏幕背景?(锁屏界面)  如何使用Golang实现路由分组管理_Golang路由分组与权限控制方法  如何在Golang中使用闭包_封装变量与函数作用域  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何在Golang中验证模块完整性_Golanggo.sum校验与安全实践  php下载安装后swoole扩展怎么安装_异步框架支持【汇总】  php485支持哪些操作系统_php485跨系统支持情况介绍【解答】  如何测试您的网站全球打开速度-网站海外测速工  跨文件调用类方法怎么用_php作用域操作符与自动加载配合【介绍】  Win11如何更改任务栏颜色 Win11自定义任务栏背景色【美化】  Win11如何关闭小娜Cortana Win11禁用Cortana语音助手【优化】  Win11怎么开启游戏模式_Win11优化游戏帧数性能【教程】  Linux怎么设置磁盘配额_Linux系统Quota安装与用户空间限制【教程】  c++中如何求一个数的平方根_c++ sqrt函数与牛顿迭代法  Win11如何关闭游戏模式 Win11禁用Xbox Game Bar录制【优化】  Python lxml的etree和ElementTree有什么区别  ACF 教程:正确更新嵌套在多层 Group 字段内的子字段  Windows 11无法安全删除U盘提示设备正在使用中怎么办_Windows 11找出占用设备进程  Python迭代器生成器进阶教程_节省内存与懒加载实战  php控制舵机角度怎么调_php发送pwm信号控制舵机转动【解答】  mac怎么打开终端_MAC终端Terminal使用入门与常用命令【教程】  Win11怎么关闭键盘按键音_Win11禁用打字声音反馈【教程】  如何使用Golang benchmark测量函数延迟_统计执行耗时  MySQL 中使用 IF 和 CASE 实现查询字段条件化显示  php中常量能用::访问吗_类常量与作用域操作符使用场景【汇总】  Windows 10怎么隐藏特定更新补丁_Windows 10使用微软官方工具wushowhide.diagcab 

 2026-01-05

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.