讲师中心 微信公众号
AI工具推荐 视频效率加速

C++如何获取当前时间?(chrono库使用教程)

风强大大_5537

风强大大_5537

发布时间:2025-12-31 17:00:11

|

647人浏览过

|

来源于php中文网

原创

最推荐的方式是调用 std::chrono::system_clock::now() 获取高精度跨平台时间点,再通过 to_time_t 转换为 time_t,结合线程安全的 localtime_s/localtime_r 转为 tm,最后用 std::put_time 格式化输出。

c++如何获取当前时间?(chrono库使用教程)

用 std::chrono 获取当前时间最推荐的方式是调用 std::chrono::system_clock::now(),它返回一个高精度、跨平台的时间点(time_point),再配合格式化转换就能得到可读的时间字符串。

获取系统当前时间点

std::chrono::system_clock::now() 是 C++11 引入的标准方式,代表自纪元(通常是 1970-01-01 00:00:00 UTC)以来的时间。它不依赖本地时区,但可转换为本地时间。

  • 返回类型是 std::chrono::time_point<:chrono::system_clock></:chrono::system_clock>
  • 精度由实现决定(通常为纳秒或微秒),可用 time_since_epoch().count() 提取底层计数值
  • 不能直接输出,需转为 std::time_t 或使用 C++20 的 <format></format>(或传统 C 风格转换)

转成可读的日期时间字符串(C++11/14/17)

借助 std::chrono::system_clock::to_time_t 和 C 标准库函数(如 localtime_s / localtime_r 或 gmtime)完成格式化:

  • 先用 system_clock::to_time_t(now) 转为 time_t
  • 再用线程安全版本(如 Windows 用 localtime_s,Linux/macOS 用 localtime_r)转为 tm 结构体
  • 最后用 std::put_time 或 strftime 格式化输出

示例(本地时间):

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

windows-auto
windows-auto

Windows 桌面自动化技能,支持鼠标控制(移动/点击/拖拽/滚轮/截图)、键盘输入(文字输入/按键/组合键)、窗口管理(查找/聚焦/最大化/最小化/关闭/移动)、截图并发送文件。提供两种截图方式:Python pyautogui 截图(集成在自动化流程中)和 PowerShell + .NET 零依赖截图(支持区域截图和多显示器)。当用户需要自动化 Windows 桌面操作、控制鼠标键盘、管理窗口、执行 GUI 自动化任务、截图发送文件时使用。

下载
auto now = std::chrono::system_clock::now();
std::time_t t = std::chrono::system_clock::to_time_t(now);
std::tm tm{};
#ifdef _WIN32
    localtime_s(&tm, &t);
#else
    localtime_r(&t, &tm);
#endif
std::cout << std::put_time(&tm, "%Y-%m-%d %H:%M:%S") << '\n';

C++20 起更简洁的方式:使用 +

C++20 标准支持直接格式化 time_point,无需经过 time_t 和 tm 中转:

  • 包含头文件 <chrono></chrono> 和 <format></format>
  • 用 std::format(std::chrono::system_clock::now(), u8"%Y-%m-%d %H:%M:%S")
  • 自动处理时区(默认为本地时区),也支持 UTC:std::chrono::utc_clock::now()

注意:需编译器支持(GCC 13+、Clang 15+、MSVC 2022 17.4+),并开启 -std=c++20。

获取毫秒/微秒级时间戳(适合日志或性能测量)

若只需数字形式的时间戳(如记录毫秒数),可直接从 time_point 提取:

  • auto ms = std::chrono::duration_cast<:chrono::milliseconds>(now.time_since_epoch()).count();</:chrono::milliseconds>
  • auto us = std::chrono::duration_cast<:chrono::microseconds>(now.time_since_epoch()).count();</:chrono::microseconds>
  • 这类整数适合日志前缀、计时差值计算,也便于序列化存储

注意:不要用 count() 直接当作“毫秒时间戳”理解——它是相对于纪元的总毫秒数,不是当前小时内的毫秒。

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3528

2023.11.20

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1789

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1211

2024.06.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1838

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2924

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6224

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

6109

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

7694

2024.03.22

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

100

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn