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用法类似。

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

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

相关文章

Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取相机当前数据吞吐量(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来获取相机当前数据吞吐量&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的数据吞吐量的技术背景CameraExplorer如何查看相机吞吐量信息在BGAPI SDK里通过函数获取相机接口吞吐量 Baumer工业相机通过BGAPI SDK获取…

x光下危险物品/违禁物品目标识别的模型训练与推理代码

前言 1.安检在公共场合的重要性不言而喻&#xff0c;保障群众人身安全是其首要任务。在各种场合&#xff0c;安检都是不可或缺的环节。x光安检机作为安检的重要工具&#xff0c;尽管其具有人工监控判断成像的特性&#xff0c;但是其局限性也十分明显。 为了解决这一局限性为出…

python+seaborn线性回归 拟合

文章目录 估计回归拟合绘制线性回归模型的函数拟合不同类型的模型以其他变量为条件在其他情况下绘制回归图估计回归拟合 许多数据集包含多个定量变量,分析的目的通常是将这些变量相互联系起来。我们之前讨论过可以通过显示两个变量的联合分布来实现这一目标的函数。不过,使用…

React 核心开发者 Dan Abramov 宣布从 Meta 离职

导读React.js 核心开发者、Redux 作者 Dan Abramov 在社交平台发文宣布&#xff0c;将辞去在 Meta 的职务&#xff1a; “我感到苦乐参半&#xff0c;几周后我就要辞去 Meta 的工作了。在 Meta 的 React 组织工作是我的荣幸。感谢我过去和现在的同事接纳我&#xff0c;容忍我犯…

Java02-迭代器,数据结构,List,Set ,Map,Collections工具类

目录 什么是遍历&#xff1f; 一、Collection集合的遍历方式 1.迭代器遍历 方法 流程 案例 2. foreach&#xff08;增强for循环&#xff09;遍历 案例 3.Lamdba表达式遍历 案例 二、数据结构 数据结构介绍 常见数据结构 栈&#xff08;Stack&#xff09; 队列&a…

java:使用flexmark-java 实现 CommonMark(规范 0.28)解析

文档 https://github.com/vsch/flexmark-java 依赖 Java 8 <dependency><groupId>com.vladsch.flexmark</groupId><artifactId>flexmark-all</artifactId><version>0.62.2</version> </dependency>Java 9 <dependency…

QT中定时器的使用

文章目录 概述步骤 概述 Qt中使用定时器大致有两种&#xff0c;本篇暂时仅描述使用QTimer实现定时器 步骤 // 1.创建定时器对象 QTimer *timer new QTimer(this);// 2.开启一个定时器&#xff0c;5秒触发一次 timer->start(5000); // 3.建立信号槽连接&am…

9.物联网操作系统之软件定时器

一。软件定时器概念及应用 1.软件定时器定义 就是软件实现定时器。 2.FreeRTOS软件定时器介绍 如上图所示&#xff0c;Times的左边为设置定时器时间&#xff0c;设置方式可以为任务设置或者中断设置&#xff1b;Times的右边为定时器的定时响应&#xff0c;使用CallBack响应。…

OLAP ModelKit Crack,ADO.NET和IList

OLAP ModelKit Crack,ADO.NET和IList OLAP ModelKit是一个多功能的.NET OLAP组件&#xff0c;用C#编写&#xff0c;只包含100%托管代码。它具有XP主题的外观&#xff0c;并能够使用任何.NET数据源(ADO.NET和IList)。借助任何第三方组件(尤其是图表组件)呈现数据的能力扩展了产品…

MySQL alter命令修改表详解

目录 ALTER TABLE 语法 ALTER TABLE 实例 添加一列 添加多列 重命名列 修改列定义 修改列名和定义 添加主键 删除列 重命名表 修改表的存储引擎 结论 在使用表的过程中&#xff0c;如果您需要对表进行修改&#xff0c;您可以使用 ALTER TABLE 语句。通过 ALTER TAB…

春秋云镜 CVE-2020-25540

春秋云镜 CVE-2020-25540 Thinkadmin v6任意文件读取漏洞 靶标介绍 ThinkAdmin 6版本存在路径查找漏洞&#xff0c;可利用该漏洞通过GET请求编码参数任意读取远程服务器上的文件。 启动场景 漏洞利用 1、未授权列目录poc 读取网站根目录Payload: http://think.admin/Think…

【LeetCode】105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树 这道题也是经典的数据结构题了&#xff0c;有时候面试题也会遇到&#xff0c;已知前序与中序的遍历序列&#xff0c;由前序遍历我们可以知道第一个元素就是根节点&#xff0c;而中序遍历的特点就是根节点的左边全部为左子树&#xff0c;右…

4用opencv玩转图像2

opencv绘制文字和几何图形 黑色底图 显示是一张黑色图片 使用opencv画圆形 #画一个圆 cv2.circle(imgblack_img,center(400,400),radius100,color(0,0,255),thickness10) 画实心圆 只需要把thickness-1。 cv2.circle(imgblack_img,center(500,600),radius50,color(0,0,255),t…

C#垃圾回收器GC、析构函数(Finalize 方法)和Dispose

1、垃圾回收器GC GC&#xff08;Garbage Collection)是.NET中的垃圾回收器。以应用程序的root为基础&#xff0c;遍历应用程序在Heap上动态分配的所有对象&#xff0c;通过识别它们是否被引用&#xff0c;来确定哪些对象是已经死亡的&#xff0c;哪些仍需要被使用。已经不再被…

Python Web 开发 Flask 介绍

WEB开发是现在程序必会的技能&#xff0c;因为大部分软件都以Web形式提供&#xff0c;及时制作后台开发&#xff0c;或者只做前台开发&#xff0c;也需要了解Web开发的概念和特点。由于Python是解释性脚本语言&#xff0c;用来做Web开发非常适合&#xff0c;而且Python有上百种…

batch_softmax_loss

每个用户抽取一定数量的困难负样本&#xff0c;然后ssm def batch_softmax_loss_neg(self, user_idx, rec_user_emb, pos_idx, item_emb):user_emb rec_user_emb[user_idx]product_scores torch.matmul(F.normalize(user_emb, dim1), F.normalize(item_emb, dim1).transpose(…

K8s持久化存储(nfs网络存储)

数据卷 emptydir&#xff0c;是本地存储&#xff0c;pod重启&#xff0c;数据就不存在了&#xff0c;需要对数据持久化存储 1.nfs&#xff0c;网络存储 &#xff0c;pod重启&#xff0c;数据还存在的

elasticsearch的副本和分片的区别

es/elasticsearch的副本和分片的区别 一&#xff1a;概念 &#xff08;1&#xff09;集群&#xff08;Cluster&#xff09;&#xff1a; ES可以作为一个独立的单个搜索服务器。不过&#xff0c;为了处理大型数据集&#xff0c;实现容错和高可用性&#xff0c;ES可以运行在许多互…

【C语言学习——————预处理3000字讲解】

欢迎阅读新一期的c语言学习模块————预处理 ✒️个人主页&#xff1a;-_Joker_- &#x1f3f7;️专栏&#xff1a;C语言 &#x1f4dc;代码仓库&#xff1a;c_code &#x1f339;&#x1f339;欢迎大佬们的阅读和三连关注&#xff0c;顺着评论回访&#x1f339;&#x1f339…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--功能实现[五]

文章目录 SSM--功能实现实现功能09-带条件查询分页显示列表需求分析/图解思路分析代码实现测试分页条件查询带条件分页查询显示效果 实现功能10-添加家居表单前端校验需求分析/图解思路分析代码实现完成测试测试页面效果 实现功能11-添加家居表单后端校验需求分析/图解思路分析…