QT获取时间日期的方法详解:从QDateTime到std::chrono的高效实践

时间是软件开发中的核心要素——无论是日志记录、数据同步还是界面展示,都需要精准获取时间。本文深入探讨Qt框架中5种获取时间日期的高效方法,并附完整代码示例。*

一、Qt时间日期处理的核心类

Qt提供了QDateTime、QDate、QTime三大类,全面覆盖日期时间处理需求:

QDateTime:日期+时间的完整组合
QDate:纯日期(年/月/日)
QTime:纯时间(时/分/秒/毫秒)

二、五种时间获取方法详解

方法1:QDateTime

最佳实践场景:需要完整日期时间信息的场景(如日志时间戳)

#include <QDateTime>

// 获取当前日期时间
QDateTime current = QDateTime::currentDateTime();
qDebug() << "当前时间:" << current.toString("yyyy-MM-dd hh:mm:ss.zzz");

// 获取UTC时间
QDateTime utcTime = QDateTime::currentDateTimeUtc();
qDebug() << "UTC时间:" << utcTime.toString(Qt::ISODateWithMs);

// 时间戳转换
qint64 timestamp = current.toSecsSinceEpoch(); // 秒级时间戳
qint64 msTimestamp = current.toMSecsSinceEpoch(); // 毫秒级

方法2:QDate与QTime独立使用

适用场景:只需日期或时间的场景(如生日选择器、闹钟设置)

QDate today = QDate::currentDate();
qDebug() << "今天日期:" 
         << today.toString("yyyy年M月d日") 
         << " 星期" << today.dayOfWeek();

QTime now = QTime::currentTime();
qDebug() << "当前时间:" 
         << now.toString("HH:mm:ss.zzz") 
         << " 当日毫秒数:" << now.msecsSinceStartOfDay();

方法3:C++11 std::chrono(跨框架通用)

优势:高精度计时、跨平台通用

#include <chrono>

auto tp = std::chrono::system_clock::now();
time_t timestamp = std::chrono::system_clock::to_time_t(tp);

// 转换为Qt时间
QDateTime qtTime = QDateTime::fromSecsSinceEpoch(timestamp);

// 毫秒级精度
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
    tp.time_since_epoch()).count();

方法4:QLocale本地化格式化

特殊需求:多语言环境下的日期显示

QLocale cnLocale(QLocale::Chinese);
QString localized = cnLocale.toString(QDateTime::currentDateTime(),
                    "yyyy-MM-dd ddd HH:mm:ss");
// 输出:2025-03-24 周一 11:30:45

方法5:系统API(Windows/Linux)

慎用场景:需要特定系统功能时

#ifdef Q_OS_WIN
    SYSTEMTIME st;
    GetSystemTime(&st);
    qDebug() << st.wYear << st.wMonth << st.wDay;
#else
    struct timeval tv;
    gettimeofday(&tv, nullptr);
#endif

三、性能对比与选型建议

方法精度跨平台易用性推荐场景
QDateTime毫秒级★★★★通用日期时间处理
std::chrono纳秒级★★★☆高精度计时 / 跨框架项目
系统 API可变×★★☆☆需调用系统特定功能

四、实战技巧与避坑指南

时区处理:建议使用currentDateTimeUtc()统一存储UTC时间,显示时再转换

格式化字符串:

yyyy:四位年份

hh:12小时制,HH:24小时制

AP:显示AM/PM

性能优化:频繁获取时间时,避免在循环内重复创建QDateTime对象

五、扩展应用:倒计时/耗时统计

// 精确耗时统计
auto start = std::chrono::high_resolution_clock::now();
// ...执行操作
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
qDebug() << "耗时:" << duration.count() << "微秒";


选择合适的时间处理方式能让代码更高效可靠。建议优先使用Qt原生类,在需要高精度或跨框架时结合std::chrono使用。如有疑问欢迎评论区交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39687.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot学习笔记(主)

文章目录 SpringBoot概述自动装配&#xff08;部分&#xff09;概述原理简述相关解释源码位置EnableAutoConfigurationAutoConfigurationImportSelector 配置文件yaml语法单双引号列表多行字符串 配置文件的位置和加载顺序配置文件取值运行jar包 Springboot整合springmvc自动管…

python多线程和多进程的区别有哪些

python多线程和多进程的区别有七种&#xff1a; 1、多线程可以共享全局变量&#xff0c;多进程不能。 2、多线程中&#xff0c;所有子线程的进程号相同&#xff1b;多进程中&#xff0c;不同的子进程进程号不同。 3、线程共享内存空间&#xff1b;进程的内存是独立的。 4、同一…

docker 安装部署 canal

1 mysql 安装 1.1 拉取镜像 docker pull mysql:8.4.41.2 创建挂载目录 mkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/confmkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/datamkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/log1.3 编辑配置文…

基于SpringBoot的图书借阅小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

ElasticSearch快速入门--实现分词搜索

分词题目搜索 使用Elasticsearch实现题目数据的存储和分词搜索&#xff0c;需要将数据库的数据同步到 Elasticsearch。 ElasticSearch入门 ElasticSearch&#xff08;简称ES&#xff09;是一个开源的分布式搜索和数据分析引擎&#xff0c;用Java开发并且是当前最流行的开源的…

debug - 安装.msi时,为所有用户安装程序

文章目录 debug - 安装.msi时&#xff0c;为所有用户安装程序概述笔记试试在目标.msi后面直接加参数的测试 备注备注END debug - 安装.msi时&#xff0c;为所有用户安装程序 概述 为了测试&#xff0c;装了一个test.msi. 安装时&#xff0c;只有安装路径的选择&#xff0c;没…

Skyeye 云智能制造办公系统 VUE 版本 v3.15.14 发布

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

深度学习PyTorch之动态计算图可视化 - 使用 torchviz 生成计算图

序号系列文章1深度学习训练中GPU内存管理2深度学习PyTorch之数据加载DataLoader3深度学习 PyTorch 中 18 种数据增强策略与实现4深度学习pytorch之简单方法自定义9类卷积即插即用5深度学习PyTorch之13种模型精度评估公式及调用方法6深度学习pytorch之4种归一化方法&#xff08;…

ZW3D二次开发_非模板表单_输入框类控件_逐字符回调

ZW3D的非模板表单的控件中有一些输入框类的控件&#xff0c;比如“ZsCc::LineEditBtn”,"ZsCc::LineEditEx"等&#xff0c;按照“ZW3D二次开发_非模板表单_控件_添加回调-CSDN博客”介绍的方法添加函数命令时&#xff0c;发现输入框在用户输入字符时不能动态地触发回…

Mysql--日志(错误日志、二进制日志、查询日志、慢查询日志)

四种日志对比总结 日志类型作用记录内容特点常见用途错误日志记录 MySQL 运行过程中的错误、警告及启动、关闭信息MySQL 系统错误、故障信息、警告等较少占用磁盘空间故障排查、系统监控二进制日志记录所有更改数据库数据的操作及事务执行情况DML、DDL 操作&#xff0c;不记录…

AI对软件工程(software engineering)的影响在哪些方面?

AI对软件工程&#xff08;software engineering&#xff09;的影响是全方位且深远的&#xff0c;它不仅改变了传统开发流程&#xff0c;还重新定义了工程师的角色和软件系统的构建方式。以下是AI影响软件工程的核心维度&#xff1a; 一、开发流程的智能化重构 需求工程革命 • …

ElementPlus 快速入门

目录 前言 为什么要学习 ElementPlus&#xff1f; 正文 步骤 1 创建 一个工程化的vue 项目 ​2 安装 element-Plus :Form 表单 | Element Plus 1 点击 当前界面的指南 2 点击左边菜单栏上的安装&#xff0c;选择包管理器 3 运行该命令 demo(案例1 &#xff09; 步骤 …

stable diffusion本地安装

1. 基本环境准备 安装conda 环境 pytorch基础学习-CSDN博客 创建虚拟环境&#xff1a; conda create -n sd python3.10 一定要指定用3.10&#xff0c;过高的版本会提示错误&#xff1a; 激活启用环境&#xff1a; conda activate sd 设置pip国内镜像源&#xff1a; pip conf…

使用 Go 构建 MCP Server

一个互联网技术玩家&#xff0c;一个爱聊技术的家伙。在工作和学习中不断思考&#xff0c;把这些思考总结出来&#xff0c;并分享&#xff0c;和大家一起交流进步。 一、MCP 介绍 1. 基本介绍 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是…

Python----计算机视觉处理(Opencv:模板匹配)

一、 概念 模板匹配就是用模板图&#xff08;通常是一个小图&#xff09;在目标图像&#xff08;通常是一个比模板图大的图片&#xff09;中不断的滑动 比较&#xff0c;通过某种比较方法来判断是否匹配成功。 二、应用场景 1. 目标检测与识别&#xff1a;在计算机视觉领域&am…

【stm32】用从模式控制器 完成PWM的测量

&#x1f31e;学习视频还是来自于 铁头山羊 &#x1f33f;主要是回顾一下他讲的这一章的定时器的部分&#xff0c;具体的话 还是看一下具体铁头山羊的视频&#xff0c;讲的很清楚~~ 整体流程是这样的&#xff0c;首先通过定时器的输出比较功能&#xff0c;配置好PA6产生一个特定…

【C#】CS学习之Modbus通讯

摘要 本文详细描述了如何在在C#的Winform应用程序中使用NModbus库实现Modbus通讯&#xff0c;包括读取保持寄存器、以及相应的UI界面设计和事件处理。 前言 ​应用场景 Modbus 从站广泛应用于工业自动化领域&#xff1a; 1、传感器数据采集&#xff08;如温度、压力等&#xf…

Pycharm社区版创建Flask项目详解

一、创建工程项目 二、配置工程目录 新建的空项目下创建目录。 1、新建app.py文件 2、app.py代码如下&#xff1a; from flask import Flask, render_templateapp Flask(__name__)app.route("/") def root():"""主页:return: Index.html"&qu…

Linux 基础入门操作 第十二章 TINY Web 服务器

1 服务器基础架构 1.1 背景知识 Web 服务器使用 HTTP 协议与客户端&#xff08;即浏览器&#xff09;通信&#xff0c;而 HTTP 协议又基于 TCP/IP 协议。因此我们要做的工作就是利用 Linux 系统提供的 TCP 通信接口来实现 HTTP 协议。 而 Linux 为我们提供了哪些网络编程接口…

RAG优化:python从零实现[吃一堑长一智]循环反馈Feedback

本文将介绍一种有反馈循环机制的RAG系统,让当AI学会"吃一堑长一智",给传统RAG装了个"后悔"系统,让AI能记住哪些回答被用户点赞/拍砖,从此告别金鱼记忆: 每次回答都像在玩roguelike:失败结局会强化下次冒险悄悄把优质问答变成新知识卡牌,实现"以…