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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8s中的核心技术Helm

1.helm的引入 &#xff08;1&#xff09;编写yaml文件 &#xff08;2&#xff09;编写deployment文件 &#xff08;3&#xff09;编写service文件 &#xff08;4&#xff09;编写Ingress文件 2.helm的引入解决的问题&#xff1f; &#xff08;1&#xff09;使用helm可以把…

oracle 存储过程返回 结果集 table形式 (使用sys_refcursor 及程序包package 两种方式)

1.创建一个表Test用来测试. 1 CREATE TABLE "TEST" 2 ( "AAA" NUMBER(*,0), 3 "BBB" VARCHAR2(10 BYTE) 4 ) 2.向Test表中插入测试数据 1 insert into Test values(1,a); 2 insert into Test values(2,b); 3 insert into Test …

Arthas协助MQ消费性能优化

背景 项目中使用AWS的SQS消息队列进行异步处理&#xff0c;QA通过压测发现单机TPS在23左右&#xff0c;目标性能在500TPS&#xff0c;所以需要对消费逻辑进行优化&#xff0c;提升消费速度。 目标 消费TPS从23提升到500 优化流程 优化的思路是先分析定位性能瓶颈&#xff…

AD21 PCB设计的高级应用(九)3D PDF的输出

&#xff08;九&#xff09;3D PDF的输出 1.3D PDF的输出2.制作PCB 3D视频 1.3D PDF的输出 Altium Designer 19 带有 3D输出功能,能够直接将 PCB 的 3D效果输出到 PDF 中。 ’(1)打开带有 3D 模型的 PCB 文件,执行菜单栏中“文件”→“导出”→“PDF3D”命令&#xff0c;选择…

“我,在腾讯月薪5万,离职后才明白:人越努力,只会越平庸”

那天看瑞达利欧说&#xff0c;他今年已经60岁了&#xff0c;可以说是阅人无数&#xff0c;但没有一个成功人士天赋异禀。 真的如他所说吗&#xff1f; 那张一鸣呢&#xff1f; 字节做到这么大&#xff0c;赚了这么多钱&#xff0c;不靠天赋&#xff0c;靠的是什么&#xff1…

PoseFormer:基于视频的2D-to-3D单人姿态估计

3D Human Pose Estimation with Spatial and Temporal Transformers论文解析 摘要1. 简介2. Related Works2.1 2D-to-3D Lifting HPE2.2 GNNs in 3D HPE2.3 Vision Transformers 3. Method3.1 Temporal Transformer Baseline3.2 PoseFormer: Spatial-Temporal TransformerSpati…

Grafana集成prometheus(2.Grafana安装)

查找镜像 docker search grafana下载指定版本 docker pull grafana/grafana:10.0.1启动容器脚本 docker run -d -p 3000:3000 --namegrafana grafana/grafana:10.0.1查看是否启动 docker ps防火墙开启 检查防火墙3000端口是否开启 默认用户及密码 admin/admin 登录 ht…

Python实现GA遗传算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世…

【0805作业】Linux中 AB终端通过两根有名管道进行通信聊天(半双工)(全双工)

作业一&#xff1a;打开两个终端&#xff0c;要求实现AB进程对话【两根管道】 打开两个终端&#xff0c;要求实现AB进程对话 A进程先发送一句话给B进程&#xff0c;B进程接收后打印B进程再回复一句话给A进程&#xff0c;A进程接收后打印重复1.2步骤&#xff0c;当收到quit后&am…

【Docker】DockerFile

目录 一、镜像原理 二、如何制作镜像 1、容器转镜像 2、DockerFile 三、DockerFile关键字​编辑 四、案例&#xff1a;部署SpringBoot项目 一、镜像原理 docker镜像是由一个特殊的文件系统叠加而成的&#xff0c;他的最低端是bootfs&#xff0c;并使用宿主机的bootfs&…

FPGA优质开源项目 – PCIE通信

本文介绍一个FPGA开源项目&#xff1a;PCIE通信。该工程围绕Vivado软件中提供的PCIE通信IP核XDMA IP建立。Xilinx提供了XDMA的开源驱动程序&#xff0c;可在Windows系统或者Linux系统下使用&#xff0c;因此采用XDMA IP进行PCIE通信是比较简单直接的。 本文主要介绍一下XDMA I…

继承(Inheritance)

Odoo的一个强大方面是它的模块化。模块专用于业务需求&#xff0c;但模块也可以相互交互。这对于扩展现有模块的功能非常有用。例如&#xff0c;在我们的房地产场景中&#xff0c;我们希望在常规用户视图中直接显示销售人员的财产列表。 在介绍特定的Odoo模块继承之前&#xf…

卸载本机已安装的node.js(v.16.13.0版本)

因为要用多版本的node&#xff0c;准备安装一个nvm管理&#xff0c;所以需要先卸载掉原来安装的v.16.13.0版本。 记录一下卸载过程 1、在系统设置-应用里卸载node 妈蛋这样卸载报错。。找了下根本没有这个路径 那就只能最简单的方法了&#xff0c;全部删掉 1、删除node的安装…

pygame贪吃蛇游戏

pygame贪吃蛇游戏 贪吃蛇游戏通过enter键启动&#xff0c;贪吃蛇通过WSAD进行上下左右移动&#xff0c;每次在游戏区域中随机生成一个食物&#xff0c;每次吃完食物后&#xff0c;蛇变长并且获得积分&#xff1b;按空格键暂停。 贪吃蛇 import random, sys, time, pygame from …

[CKA]考试之PersistentVolumeClaims

由于最新的CKA考试改版&#xff0c;不允许存储书签&#xff0c;本博客致力怎么一步步从官网把答案找到&#xff0c;如何修改把题做对&#xff0c;下面开始我们的 CKA之旅 题目为&#xff1a; Task 创建一个名字为pv-volume的pvc&#xff0c;指定storageClass为csi-hostpath-…

大模型使用——超算上部署LLAMA-2-70B-Chat

大模型使用——超算上部署LLAMA-2-70B-Chat 前言 1、本机为Inspiron 5005&#xff0c;为64位&#xff0c;所用操作系统为Windos 10。超算的操作系统为基于Centos的linux&#xff0c;GPU配置为A100&#xff0c;所使用开发环境为Anaconda。 2、本教程主要实现了在超算上部署LLAM…

MySQL — InnoDB事务

文章目录 事务定义事务特性事务隔离级别READ UNCOMMITTEDREPEATABLE READREAD COMMITTEDSERIALIZABLE 事务存在的问题脏读&#xff08;Dirty Read&#xff09;不可重复读&#xff08;Non-repeatable Read&#xff09;幻读&#xff08;Phantom Read&#xff09; 事务定义 数据库…

零代码爬虫平台SpiderFlow的安装

什么是 Spider Flow &#xff1f; Spider Flow 是一个高度灵活可配置的爬虫平台&#xff0c;用户无需编写代码&#xff0c;以流程图的方式&#xff0c;即可实现爬虫。该工具支持多数据源、自动保存至数据库、任务监控、抓取 JS 动态渲染页面、插件扩展&#xff08;OCR 识别、邮…

Windows下安装Scala(以Scala 2.11.12为例)

Windows下安装Scala&#xff08;以Scala 2.11.12为例&#xff09; 一、Scala2.11.12官网下载二、Scala2.11.12网盘下载三、Scala各版本下载地址四、Scala安装4.1、点击 scala-2.11.12.msi 文件安装4.2、设置环境变量 %SCALA_HOME%4.3、环境变量Path添加条目%SCALA_HOME%\bin 四…

【云原生】使用kubeadm搭建K8S

目录 一、Kubeadm搭建K8S1.1环境准备1.2所有节点安装docker1.3所有节点安装kubeadm&#xff0c;kubelet和kubectl1.4部署K8S集群1.5所有节点部署网络插件flannel 二、部署 Dashboard 一、Kubeadm搭建K8S 1.1环境准备 服务器IP配置master&#xff08;2C/4G&#xff0c;cpu核心…