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

Qt应用开发(基础篇)——时间类 QDateTime、QDate、QTime

一、前言

        时间类QDateTimeQDateQTime、QTimeZone保存了Qt的时间、日期、时区信息,常用的时间类部件都会用到这些数据结构,常用概念有年、月、日、时、分、秒、毫秒和时区,时间和时区就关系到时间戳和UTC的概念。

        UTC时间,又称世界统一时间、世界标准时间、国际协调时间。中国大陆、中国香港、中国澳门、中国台湾与UTC时差均为+8,也就是UTC+8,Windows在设置时间界面-调整时区的下拉框中可以找到这些。

        Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

        DST夏令时,又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”,一般在天亮早的夏季人为将时间调快一小时,各个地方制度不一样。

一、QDateTime类

        QDateTime类是QDate和QTime的组合,用来显示时间和日期。可以与QTimeZone类一起描述与本地时间、UTC时间、UTC的指定偏移量或指定时区相关的日期时间。

        QDateTime时间戳是qint64类型,所以这将日期范围限制在+/- 2.92亿年左右。在创建具有极端值的QDateTime时,必须小心,以免溢出存储空间。支持的值的确切范围取决于时间戳和时区。

1、构造对象

        QDateTime提供了多种构造函数来实例化对象。

        给定日期,时间默认为(00:00:00.000),并将timeSpec()设置为Qt::LocalTime。

QDateTime(const QDate &date)

        给定时间和日期加时间规范创建。如果spec是Qt::OffsetFromUTC,那么它将被设置为Qt::UTC,即0秒的偏移量。如果spec是Qt::TimeZone,那么spec将被设置为Qt::LocalTime,即当前系统时区。

QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec = Qt::LocalTime)

        给定时间和日期加时区偏移量创建。如果规格是Qt::OffsetFromUTC和offsetSeconds为0,那么timeSpec将被设置为Qt::UTC,即0秒的偏移量。

QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec, int offsetSeconds)

        给定时间和日期加加timeZone指定的时区创建,timeSpec将被设置为Qt::TimeZone。

QDateTime(const QDate &date, const QTime &time, const QTimeZone &timeZone)

         根据其他现有对象创建。

QDateTime::QDateTime(const QDateTime &other)

        还可以通过静态函数传入时间戳(自1970-01-01T00:00:00.000以来经过的毫秒数/秒数)或者字符串来构造。

QDateTime fromMSecsSinceEpoch(qint64 msecs)
QDateTime fromMSecsSinceEpoch(qint64 msecs, Qt::TimeSpec spec, int offsetSeconds = 0)
QDateTime fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
QDateTime fromSecsSinceEpoch(qint64 secs, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0)
QDateTime fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone)QDateTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
QDateTime fromString(const QString &string, const QString &format, QCalendar cal)

        示例:

QString string = "Tuesday, 23 April 12 22:51:41";
QString format = "dddd, d MMMM yy hh:mm:ss";
QDateTime valid = QDateTime::fromString(string, format);

2、时间加减

        QDateTime允许时间直接进行加减,得到一个早晚的时间,方法结果都返回一个新的对象,参数如果是正数则晚几年/月/天/秒/毫秒,负数则早几年/月/天/秒/毫秒。

        如果timeSpec为Qt::LocalTime,加减刚好落在标准时间和夏令时的过渡上,那么会进行调整。比如过渡是在凌晨2点,时钟向前到凌晨3点,结果落在凌晨2点和凌晨3点之间,那么结果将被调整到凌晨3点之后。

QDateTime addYears(int nyears) const     //加减年数
QDateTime addMonths(int nmonths) const   //加减月数
QDateTime addDays(qint64 ndays) const    //加减天数
QDateTime addSecs(qint64 s) const        //加减秒数
QDateTime addMSecs(qint64 msecs) const   //加减毫秒

3、时间参数

      通过QDateTime的公共方法获取日期、时间、时间规范、时区。使用setTimeZone()则timeSpec()被设置成Qt::TimeZone。使用setOffsetFromUtc(),如果offset为0,timeSpec()返回Qt::UTC否则为Qt::OffsetFromUTC。

QDate date() const                        //获取日期
void setDate(const QDate &date)           //设置时间QTime time() const                        //获取时间
void setTime(const QTime &time)           //设置时间QTimeZone timeZone() const                //获取时区
void setTimeZone(const QTimeZone &toZone) //设置时区int offsetFromUtc() const                 //获取UTC偏移量,       
void setOffsetFromUtc(int offsetSeconds)  //设置UTC偏移量,Qt::TimeSpec timeSpec() const             //获取时间规范
void setTimeSpec(Qt::TimeSpec spec)       //设置时间规范
Qt::TimeSpec参数描述
Qt::LocalTime 当地时间
Qt::UTCUTC时间
Qt::OffsetFromUTCUTC+偏移量
Qt::TimeZone指定时区

3、计算时间间隔

       这些方法计算这个日期时间到另一个日期时间的天/秒/毫秒数。如果后面时间早于前面,返回负数。天数是以从这个日期时间到另一个日期时间之间到达午夜的次数来计算的。这意味着从23:55到第二天0:05之间的10分钟差算作一天。

qint64 daysTo(const QDateTime &other) const    //计算时间差
qint64 secsTo(const QDateTime &other) const
qint64 msecsTo(const QDateTime &other) const

        实例:结果为1、1、-1。

QDateTime startDate(QDate(2012, 7, 6), QTime(8, 30, 0));
QDateTime endDate(QDate(2012, 7, 7), QTime(16, 30, 0));
qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);startDate = QDateTime(QDate(2012, 7, 6), QTime(23, 55, 0));
endDate = QDateTime(QDate(2012, 7, 7), QTime(0, 5, 0));
qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);qSwap(startDate, endDate);
qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);

4、字符串输出

        toString方法以字符串形式返回日期时间。format参数决定结果字符串的格式。

QString toString(const QString &format) const
QString toString(Qt::DateFormat format = Qt::TextDate) const
QString toString(const QString &format, QCalendar cal) const
QString toString(QStringView format) const
QString toString(QStringView format, QCalendar cal) const

        格式如下,区分大小写

参数描述
d日数 十位不补零(1-31)
dd日数 十位补零(01-31)
ddd星期缩写名(例如:“Mon”到“Sun”),使用系统语言环境对名称进行本地化。
dddd星期完整名(例如:“Monday”到“Sunday”),使用系统语言环境对名称进行本地化。
M月份 十位不补零(1-12)
MM月份 十位补零(01-12)
MMM月份缩写名(例如:“Jan”到“Dec”),使用系统语言环境对名称进行本地化。
MMMM月份完整名(例如:“January”到“December”),使用系统语言环境对名称进行本地化。
yy两位年份(00-99)
yyyy四位年份(2023)
h小时 十位不补零(根据AM和PM显示0-23或者1-12)
hh小时 十位补零(根据AM和PM显示00-23或者01-12)
H小时 十位不补零(0-23)
HH小时 十位补零(00-23)
m分钟 十位不补零(0-59)
mm分钟 十位补零(00-59)
s秒 十位不补零(0-59)
ss秒 十位补零(00-59)
z毫秒(0-999)
zzz毫秒(000-999)
AP 或者 AAM/PM
ap 或者 aam/pm
t时区

例如:

dd.MM.yyyy                21.05.2001
ddd MMMM d yy        Tue May 21 01
hh:mm:ss.zzz             4:13:09.120
hh:mm:ss.z                14:13:09.12
h:m:s ap                     2:13:9 pm

二、QDate类

        此类表示一个特定的日期,而不考虑日历、语言环境或创建时使用的其他设置或系统提供的设置。提供year()、month()和day()函数提供对年、月和日数字的访问。提供dayOfWeek()和dayOfYear()显示日期在一周中和一年中的第几天。daysInMonth()和daysInYear()函数分别返回该日期的月份和年份中有多少天。addDays()加减时间、daysTo()比较时间,toString()函数以文本格式提供相同的信息、静态函数传入字符串构造类等这些和QDateTime用法类似。

三、QTime类

       此类包含一个时钟时间,它可以表示为从午夜开始的小时、分钟、秒和毫秒数。它提供了比较时间和通过添加毫秒数来操纵时间的函数。QTime使用24小时时钟格式,它没有AM/PM的概念。提供hour()、minute()、second()和msec()函数对时间的小时、分钟、秒和毫秒数的访问。addSecs()加减时间,secsTo()比较时间,toString()函数以文本格式提供相同的信息、静态函数传入字符串构造类类等这些和QDateTime用法类似。

相关文章:

Qt应用开发(基础篇)——时间类 QDateTime、QDate、QTime

一、前言 时间类QDateTime、QDate、QTime、QTimeZone保存了Qt的时间、日期、时区信息&#xff0c;常用的时间类部件都会用到这些数据结构&#xff0c;常用概念有年、月、日、时、分、秒、毫秒和时区&#xff0c;时间和时区就关系到时间戳和UTC的概念。 UTC时间&#xff0c;又称…...

Modbus TCP转Profinet网关modbus tcp转以太网

大家好&#xff0c;今天我们来聊一聊如何使用捷米特的Profinet转modbusTCP协议转换网关在博图上进行非透传型配置。 1, 首先&#xff0c;我们需要安装捷米特JM-TCP-PN的GSD文件&#xff0c;并根据现场设备情况配置modbusTCP地址。然后&#xff0c;在博图中添加该GSD文件&#x…...

笔记 | P4387 【深基15.习9】验证栈序列 题解

题解 问题描述 给出两个序列 pushed 和 poped&#xff0c;分别表示入栈和出栈操作的顺序。我们需要判断给定的出栈序列是否可能对应于给定的入栈序列。如果可能&#xff0c;则输出 “Yes”&#xff1b;否则&#xff0c;输出 “No”。 解题思路 读取输入&#xff1a;读取询问…...

PyTorch中nn-XXX与F-XXX的区别

nn.XXX与F.XXX PyTorch中torch.nn**&#xff08;以下简写为nn&#xff09;中的模块和torch.nn.functional&#xff08;以下简写为F&#xff09;**中的模块都提供了常用的神经网络操作&#xff0c;包括激活函数、损失函数、池化操作等。它们的主要区别如下&#xff1a; nn中的…...

zookeeper集群和kafka的相关概念就部署

目录 一、Zookeeper概述 1、Zookeeper 定义 2、Zookeeper 工作机制 3、Zookeeper 特点 4、Zookeeper 数据结构 5、Zookeeper 应用场景 &#xff08;1&#xff09;统一命名服务 &#xff08;2&#xff09;统一配置管理 &#xff08;3&#xff09;统一集群管理 &#xff08;4&a…...

第4集丨Vue 江湖 —— 计算属性

目录 一、基本使用1.1 在computed中定义1.1.1 案例1.1.2 控制台调用getter1.1.3 控制台中的data和computed 1.2 缓存效果1.3 完整写法1.3.1 案例1.3.2 效果图 1.4 简写形式 二、案例的其他实现2.1 methods实现2.2 插值语法实现 三、体会计算属性的好处3.1 复杂任务时3.2 使用计…...

Docker 容器化学习

文章目录 前言Docker架构 1、 docker安装2、启动docker服务3、设置docker随机器一起启动4、docker体验5、docker常规命令5.1、容器操作docker [run|start|stop|restart|kill|rm|pause|unpause]docker [ps|inspect|exec|logs|export|import] 5.2、镜像操作docker images|rmi|tag…...

springboot第34集:ES 搜索,nginx

#用search after解决深分页性能问题 #第一页 GET /bank/_search {"size": 10,"sort": [{"account_number": {"order": "asc"}}] }#第二页 GET /bank/_search {"size": 10,"sort": [{"account_numb…...

微信小程序中的分包使用介绍

一、分包的好处 可以优化小程序首次启动的下载时间 在多团队共同开发时可以更好的解耦协作 主包&#xff1a;放置默认启动页面/TabBar 页面&#xff0c;公共资源/JS 脚本 分包&#xff1a;根据开发者的配置进行划分 限制&#xff1a;所有分包大小不超过 20M&#xff0c;单…...

【云原生】K8S二进制搭建二:部署CNI网络组件

目录 一、K8S提供三大接口1.1容器运行时接口CRI1.2云原生网络接口CNI1.3云原生存储接口CSI 二、Flannel网络插件2.1K8S中Pod网络通信2.2Overlay Network2.3VXLAN2.4Flannel 三、Flannel udp 模式的工作原理3.1ETCD 之 Flannel 提供说明 四、vxlan 模式4.1Flannel vxlan 模式的工…...

【iOS】—— 离屏渲染

文章目录 离屏渲染UIView和CALayer关系GPU屏幕渲染有两种方式:产生离屏渲染的原因&#xff1a;既然离屏渲染这么耗性能,为什么有这套机制呢?什么情况会离屏渲染&#xff1f;既然离屏渲染这么不好&#xff0c;为什么我们还要强制开启呢&#xff1f;如何避免离屏渲染&#xff1f…...

基于人工智能的中医图像分类系统设计与实现

华佗AI 《支持中医,永远传承古老文化》 本存储库包含一个针对中药的人工智能图像分类系统。该项目的目标是通过输入图像准确识别和分类各种中草药和成分。 个人授权许可证 版权所有 2023至2050特此授予任何获得华佗AI应用程序(以下简称“软件”)副本的人免费许可,可根据以…...

spring security + oauth2 使用RedisTokenStore 以json格式存储

1.项目架构 2.自己对 TokenStore 的 redis实现 package com.enterprise.auth.config;import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis…...

css position: sticky;实现上下粘性布局,中间区域滚动

sticky主要解决的问题 1、使用absolute和fixed中间区域需要定义高度2、使用absolute和fixed底部需要写padding-bottom 避免列表被遮挡住一部分&#xff08;底部是浮窗的时候&#xff0c;需要动态的现实隐藏&#xff09; <!DOCTYPE html> <html lang"en"&…...

解密HTTP代理爬虫中的IP代理选择与管理策略

在当今数据驱动的世界中&#xff0c;HTTP代理爬虫作为一项重要的数据采集工具&#xff0c;其成功与否往往取决于IP代理的选择与管理策略。作为一家专业的HTTP代理产品供应商&#xff0c;我们深知IP代理在数据采集中的重要性。在本文中&#xff0c;我们将分享一些关于HTTP代理爬…...

pytorch入门

详细安装教程和环境配置可以看&#xff1a;Python深度学习&#xff1a;安装Anaconda、PyTorch&#xff08;GPU版&#xff09;库与PyCharm_哔哩哔哩_bilibili 跟学课程&#xff1a;B站我是土堆 pytorch中两个实用函数&#xff1a; dir()&#xff1a;打开 help():说明书…...

Redis | 主从模式

Redis | 主从模式 1. 简介 Redis主从模式&#xff08;Replication&#xff09;是Redis提供的一种数据备份和高可用性解决方案。通过主从复制&#xff0c;可以将一个Redis服务器的数据复制到其他多个从服务器&#xff0c;从而实现数据的备份和读写分离&#xff0c;提高系统的性…...

C# Blazor 学习笔记(8):row/col布局开发

文章目录 前言相关文章代码row和col组件B_rowB_col结构 使用 前言 可能是我用的element ui和 uView这种第三方组件用的太多了。我上来就希望能使用这些组件。但是目前Blazor目前的生态其实并不完善&#xff0c;所以很多组件要我们自己写。 我们对组件的要求是 我们在组件化一共…...

金融供应链智能合约 -- 智能合约实例

前提 Ownable:监管者合约,有一个函数能转让监管者。 SupplyChainFin:供应链金融合约,银行、公司信息上链&#xff0c;公司和银行之间的转账。 发票&#xff1a;记录者交易双方和交易金额等的一种记录数据。如:我在超市买了一瓶水,超市给我开了一张发票。 Ownable // SPDX-…...

论文《Contrastive Meta Learning with Behavior Multiplicity for Recommendation》阅读

论文《Contrastive Meta Learning with Behavior Multiplicity for Recommendation》阅读 论文概况论文主要贡献Background & Motivation方法论单行为图神经网络&#xff08;Behavior-aware GNN&#xff09;多行为对比学习元对比编码模型训练 实验部分论文总结 论文概况 今…...

OpenClaw低代码开发:Qwen2.5-VL-7B自动化流程设计器入门

OpenClaw低代码开发&#xff1a;Qwen2.5-VL-7B自动化流程设计器入门 1. 为什么需要可视化流程设计器&#xff1f; 上周我尝试用OpenClaw自动处理一批产品截图和说明文档时&#xff0c;遇到了一个典型问题&#xff1a;需要先让Qwen2.5-VL-7B识别图片中的关键元素&#xff0c;再…...

OpenClaw+Qwen3-4B创意助手:自动生成营销文案与设计建议

OpenClawQwen3-4B创意助手&#xff1a;自动生成营销文案与设计建议 1. 为什么需要个人创意助手&#xff1f; 去年夏天&#xff0c;我接手了一个小型咖啡品牌的社交媒体运营工作。每天需要产出5-6条不同风格的文案&#xff0c;还要设计配套的视觉方案。连续两周后&#xff0c;…...

LeRobot数据采集全流程解析:从环境配置到动作回放(SO-100实战)

LeRobot数据采集全流程实战&#xff1a;从环境搭建到动作复现的SO-100深度指南 当我们需要让机器人学会新技能时&#xff0c;数据采集是构建智能系统的第一步。LeRobot作为Hugging Face推出的机器人学习平台&#xff0c;通过标准化流程降低了开发门槛。本文将带你完整走通SO-10…...

STM32F407 ADC实战:从CubeMX配置到高精度电压采集

1. STM32F407 ADC基础与核心概念 ADC&#xff08;模数转换器&#xff09;是嵌入式开发中最常用的外设之一&#xff0c;它就像电子系统的"味蕾"&#xff0c;负责将现实世界的模拟信号&#xff08;如温度、压力、光照&#xff09;转换为单片机能够理解的数字信号。STM3…...

深度解析jqktrader:基于Python的同花顺自动化交易架构设计与实战应用

深度解析jqktrader&#xff1a;基于Python的同花顺自动化交易架构设计与实战应用 【免费下载链接】jqktrader 同花顺自动程序化交易 项目地址: https://gitcode.com/gh_mirrors/jq/jqktrader 在量化交易技术快速发展的今天&#xff0c;传统手动交易已无法满足高频、精准…...

Windows10下PaddleOCR与Python3.8.5的完美搭配:从安装到实战OCR识别

Windows10下PaddleOCR与Python3.8.5的深度实践指南 在数字化办公和自动化流程日益普及的今天&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术已经成为从图像中提取文本信息的重要工具。PaddleOCR作为百度开源的OCR工具库&#xff0c;凭借其出色的识别准确率和易用性…...

实在Agent适合什么规模的企业使用?深度解析企业级AI Agent适配逻辑与落地边界

随着2026年企业数字化转型进入深水区&#xff0c;AI Agent&#xff08;人工智能体&#xff09;已不再仅仅是实验室里的原型&#xff0c;而是演变为推动企业智能自动化的核心引擎。在当前“大模型落地”的浪潮下&#xff0c;许多企业管理者都在思考一个核心问题&#xff1a;像实…...

TOAST UI Chart仪表盘开发终极指南:Gauge图表在企业监控中的完整应用方案

TOAST UI Chart仪表盘开发终极指南&#xff1a;Gauge图表在企业监控中的完整应用方案 【免费下载链接】tui.chart &#x1f35e;&#x1f4ca; Beautiful chart for data visualization. 项目地址: https://gitcode.com/gh_mirrors/tu/tui.chart TOAST UI Chart仪表盘开…...

告别键盘连击烦恼:这款开源工具让你的机械键盘重获新生

告别键盘连击烦恼&#xff1a;这款开源工具让你的机械键盘重获新生 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 还在为键盘连击问题而…...

Marigold开发者手册:深入理解训练代码和自定义扩展

Marigold开发者手册&#xff1a;深入理解训练代码和自定义扩展 【免费下载链接】Marigold [CVPR 2024 - Oral, Best Paper Award Candidate] Marigold: Repurposing Diffusion-Based Image Generators for Monocular Depth Estimation 项目地址: https://gitcode.com/gh_mirr…...