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

news2024/9/24 1:16:39

一、前言

        时间类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.coloradmin.cn/o/839435.html

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

相关文章

FPGA初步学习之串口发送模块【单字节和字符串的发送】

串口相关简介 UART 在发送或接收过程中的一帧数据由4部分组成&#xff0c;起始位、数据位、奇偶校验位和停止位&#xff0c;如图所示。其中&#xff0c;起始位标志着一帧数据的开始&#xff0c;停止位标志着一帧数据的结束&#xff0c;数据位是一帧数据中的有效数据。 通常用…

【贪心算法】leetcode刷题

贪心算法无固定套路。 核心思想&#xff1a;先找局部最优&#xff0c;再扩展到全局最优。 455.分发饼干 两种思路&#xff1a; 1、从大到小。局部最优就是大饼干喂给胃口大的&#xff0c;充分利用饼干尺寸喂饱一个&#xff0c;全局最优就是喂饱尽可能多的小孩。先遍历的胃口&a…

Win11大小写切换图标关闭方法

大家使用Win11操作系统的时候经常会切换大小写键盘&#xff0c;有些游戏本在游戏过程中需要切换大小写&#xff0c;这个时候电脑的屏幕就会出现大小写切换的图标而影响游戏体验&#xff1b; 那么想要关闭Win11电脑上大小写切换图标&#xff0c;又不知道具体怎么操作&#xff0c…

VS Code search tab

Vs Code search 栏的应用 我发现&#xff0c;在vs code种&#xff0c;上面的搜索框的功能非常多。在最初使用vscode时候&#xff0c;以为这只是一个普通的搜索框。后来&#xff0c;发现它可以用于全局搜索文件&#xff0c;比如使用ctrlshiftp。 后来&#xff0c;我发现&#xf…

lifecycleScope Unresolved reference

描述 导入了lifecycle.lifecycleScope&#xff0c;但是在activity中使用lifecycleScope报错出现Unresolved reference找不到引用。 导包 import androidx.lifecycle.lifecycleScope使用 lifecycleScope.launch(Dispatchers.IO) {...}错误 方案 代码中的activity继承Activ…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--功能实现【四】

文章目录 SSM--功能实现实现功能06-修改家居信息需求分析/图解思路分析代码实现注意事项和细节 实现功能07-删除家居信息需求分析/图解思路分析代码实现 实现功能08-分页显示列表需求分析/图解思路分析代码实现完成测试分页显示效果 SSM–功能实现 实现功能06-修改家居信息 需…

39.利用matlab寻找素数(matlab程序)

1.简述 MATLAB嵌套循环允许使用一个循环在另一循环内&#xff0c;下面用一个嵌套循环来把所有从1到100的素数显示出来。 2.代码 %% 学习目标&#xff1a;寻找素数 clear sum5; %求0&#xff5e;100素数之和 ss0; %用来标定是否是素数&#xff0c;0表示不是 p…

MongoDB SQL

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.4\binC:\MongoDB\Server\3.4\bin> C:\MongoDB\Server\3.4\bin> C:\MongoDB\Server\3.4\bin>net start MongoDB 请求的…

Mac电脑怎么使用“磁盘工具”修复磁盘

我们可以使用“磁盘工具”的“急救”功能来查找和修复磁盘错误。 “磁盘工具”可以查找和修复与 Mac 磁盘的格式及目录结构有关的错误。使用 Mac 时&#xff0c;错误可能会导致意外行为&#xff0c;而重大错误甚至可能会导致 Mac 彻底无法启动。 继续之前&#xff0c;请确保您…

【C# 基础精讲】C# 开发环境搭建(Visual Studio等)

安装C#开发环境是开始学习和使用C#编程的第一步。目前&#xff0c;最常用的C#开发环境是Microsoft Visual Studio&#xff0c;它是一套强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了丰富的工具和功能&#xff0c;使开发C#应用程序变得更加便捷。以下是安装…

OSLog与NSLog对比

NSLog: NSLog的文档&#xff0c;第一句话就说&#xff1a;Logs an error message to the Apple System Log facility.&#xff0c;所以首先&#xff0c;NSLog就不是设计作为普通的debug log的&#xff0c;而是error log&#xff1b;其次&#xff0c;NSLog也并非是printf的简单…

Redis 6.5 服务端开启多线程源码

redis支持开启多线程&#xff0c;只有从socket到读取缓冲区和从输出缓冲区到socket这两段过程是多线程&#xff0c;而命令的执行还是单线程&#xff0c;并且是由主线程执行 借鉴&#xff1a;【Redis】事件驱动框架源码分析&#xff08;多线程&#xff09; 一、main启动时初始化…

nacos本地搭建+springCloud服务注册中心-nacos(简易实现)

一.nacos概述 nacos官网 二.Windows使用搭建nacos 较为完整使用参考 1.安装nacos 去nacos github下载nacos最新稳定版本&#xff0c;我用的是nacos-server-2.2.3.zip&#xff0c;下载后解压&#xff0c;得到 2.创建数据库 启动mysql&#xff0c;创建数据库nacos&#xff…

Day 72 固定激活函数的BP神经网络 (1. 网络结构理解)

代码&#xff1a; package dl;/*** Back-propagation neural networks. The code comes from*/public class SimpleAnn extends GeneralAnn{/*** The value of each node that changes during the forward process. The first* dimension stands for the layer, and the secon…

[迁移学习]领域泛化

一、概念 相较于领域适应&#xff0c;领域泛化(Domain generalization)最显著的区别在于训练过程中不能访问测试集。 领域泛化的损失函数一般可以描述为以下形式&#xff1a; 该式分为三项&#xff1a;第一项表示各训练集权重的线性组合&#xff0c;其中π为使该项最小的系数&a…

微信云托管(本地调试)⑥:nginx、vue刷新404问题

一、nginx默认路径 1.1、默认配置文件路径&#xff1a;/etc/nginx/nginx.conf 1.2、默认资源路径&#xff1a;/usr/share/nginx/html/index.html 二、修改nginx.conf配置 &#xff08;注意配置中的&#xff1a;include /etc/nginx/conf.d/*.conf; 里面包了一个server配置文件…

Typescript+React入门

初识Typescript 出现背景 Typescript&#xff08;以下简称TS&#xff09;实际上就是JavaScriptType&#xff0c;用数据类型的方式来约束了JS的变量定义 在JS的基础上增加了类型支持 在JS中大多数错误都是因为数据类型造成的&#xff0c;所以TS为了规避这个问题加入了类型限制…

Android性能优化—数据结构优化

优化数据结构是提高Android应用性能的重要一环。在Android开发中&#xff0c;ArrayList、LinkedList和HashMap等常用的数据结构的正确使用对APP性能的提升有着重大的影响。 一、ArrayList ArrayList内部使用的是数组&#xff0c;默认大小10&#xff0c;当数组长度不足时&…

探索OLED透明屏的参数及其在不同领域的应用

OLED透明屏作为一种创新的显示技术&#xff0c;具有高透明度、色彩鲜艳、观感独特等特点&#xff0c;正逐渐成为各个领域的热门选择。 为帮助您更好地了解和选择适合自己需求的OLED透明屏&#xff0c;尼伽便给您详细介绍一下OLED透明屏的参数&#xff0c;包括屏幕尺寸、分辨率…

SQL注入上传文件获取shell

SQL注入写文件的三个必要条件 Web目录有读写权限&#xff1a; 当目标网站的Web目录具有读写权限时&#xff0c;攻击者可以通过注入恶意SQL语句将恶意文件写入服务器上的Web目录。 知道文件的绝对路径&#xff1a; 攻击者需要知道目标系统上的文件的绝对路径&#xff0c;以便将…