QTime 类
QTime 类提供了时钟时间函数。 更多...
头文件 | #include <QTime> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
此类可进行强比较。
注意: 此类中所有函数都是重入的。
公共函数
QTime() | |
QTime(int h, int m, int s = 0, int ms = 0) | |
QTime | addMSecs(int ms) const |
QTime | addSecs(int s) const |
int | hour() const |
bool | isNull() const |
bool | isValid() const |
int | minute() const |
int | msec() const |
int | msecsSinceStartOfDay() const |
int | msecsTo(QTime t) const |
int | second() const |
int | secsTo(QTime t) const |
bool | setHMS(int h, int m, int s, int ms = 0) |
QString | toString(const QString &format) const |
QString | toString(Qt::DateFormat format = Qt::TextDate) const |
QString | toString(QStringView format) const |
静态公共成员
QTime | currentTime() |
QTime | fromMSecsSinceStartOfDay(int msecs) |
QTime | fromString(const QString &string, Qt::DateFormat format = Qt::TextDate) |
(自 6.0) QTime | fromString(QStringView string, Qt::DateFormat format = Qt::TextDate) |
(自 6.0) QTime | fromString(QStringView string, QStringView format) |
(自 6.0) QTime | fromString(const QString &string, QStringView format) |
QTime | fromString(const QString &string, const QString &format) |
bool | isValid(int h, int m, int s, int ms = 0) |
相关非成员
bool | operator!=(const QTime &lhs, const QTime &rhs) |
bool | operator<(const QTime &lhs, const QTime &rhs) |
QDataStream & | operator<<(QDataStream &out, QTime time) |
bool | operator<=(const QTime &lhs, const QTime &rhs) |
bool | operator==(const QTime &lhs, const QTime &rhs) |
bool | operator>(const QTime &lhs, const QTime &rhs) |
bool | operator>=(const QTime &lhs, const QTime &rhs) |
QDataStream & | operator>>(QDataStream &in, QTime &time) |
详细信息描述
QTime对象包含一个时钟时间,它可以表示从午夜以来的小时数、分钟数、秒数和毫秒数。它提供了比较时间以及通过添加毫秒数来操作时间的函数。应该通过值而非引用传递QTime对象到const;它们简单地将int
包装。
QTime使用24小时制时钟格式;它没有AM/PM的概念。与QDateTime不同,QTime对时区或夏令时(DST)一无所知。
一个QTime对象通常是通过明确给出小时数、分钟数、秒数和毫秒数来创建的,或者使用静态函数currentTime(),它创建一个表示系统本地时间的QTime对象。
hour()、minute()、second()和msec()函数提供了访问时间的小时数、分钟数、秒数和毫秒数的途径。相同的信息由toString()函数以文本格式提供。
addSecs()和addMSecs()函数提供了给定时间之后的时间(以秒或毫秒为单位)。相应地,可以通过secsTo()或msecsTo()查找两个时间之间秒数或毫秒数的差异。
QTime提供了一整套比较两个QTime对象的运算符;较早的时间被认为比较晚的时间小;如果A.msecsTo(B)为正,则A < B。
QTime对象也可以使用fromString()从文本表示形式创建,并使用toString()转换为字符串表示形式。所有到和从字符串格式的转换都是使用C区域设置的。有关本地化转换,请参阅QLocale。
成员函数文档
QString QTime::toString(QStringView format) const
QString QTime::toString(const QString &format) const
返回时间作为字符串。参数format确定结果字符串的格式。
可以使用以下表达式
表达式 | 输出 |
---|---|
h | 没有前导零的小时(0到23或1到12如果显示AM/PM) |
hh | 带前导零的小时(00到23或01到12如果显示AM/PM) |
H | 没有前导零的小时(0到23,即使显示AM/PM) |
HH | 带前导零的小时(00到23,即使显示AM/PM) |
m | 没有前导零的分钟(0到59) |
mm | 带前导零的分钟(00到59) |
s | 完整的秒,没有前导零(0到59) |
ss | 完整的秒,在有前导零的情况下适用(00到59) |
z或zz | 秒的小数部分,应位于小数点后,不带尾随零。因此,"s.z" 报告满百毫秒(毫秒)精度而不带尾随零(0至999)的秒数。例如,"s.z" 对于一分钟的25% 将产生 "0.25" 。 |
zzz | 秒的小数部分,精确到毫秒,在适用的情况下包括尾随零(000至999)。例如,"ss.zzz" 对于一分钟的25% 将产生 "00.250" 。 |
AP 或 A | 使用AM/PM显示。 A/AP 将被替换为 'AM' 或 'PM'。在本地化形式中(仅适用于QLocale::toString),适当的地域文本将被转换为大写。 |
ap 或 a | 使用am/pm显示。 a/ap 将被替换为 'am' 或 'pm'。在本地化形式中(仅适用于QLocale::toString),适当的地域文本将被转换为小写。 |
aP 或 Ap | 使用AM/PM显示(自6.3版起)。 aP/Ap 将被替换为 'AM' 或 'PM'。在本地化形式中(仅适用于QLocale::toString),适当的地域文本(由QLocale::amText()或QLocale::pmText返回)使用时不改变大小写。 |
t | 时区缩写(例如"CEST")。请注意,时区缩写不是唯一的。特别是,toString() 无法解析此内容。 |
tt | 时区与UTC的偏移量,小时与分钟之间没有冒号(例如"+0200")。 |
ttt | 时区与UTC的偏移量,小时与分钟之间有冒号(例如"+02:00")。 |
tttt | 时区名称(例如"Europe/Berlin")。请注意,这并不表示日期时间是在夏令时还是标准时间,如果在两个时间之间切换时的重叠小时中,可能会导致歧义。使用的名称是QTimeZone::displayName() 提供的,具有QTimeZone::LongName类型。这可能取决于使用的操作系统。 |
单引号括起来的任何非空字符序列都将被逐字包含在输出字符串中(去除引号),即使它包含格式化字符。连续的两个单引号("''")在输出中将替换为一个单引号。格式字符串中的所有其他字符都将逐字包含在输出字符串中。
无分隔符的格式支持(例如"ddMM"),但必须小心使用,因为生成的字符串并不总是可靠的可读(例如,如果"dM"产生"212",这可能意味着12月2日或2月21日)。
示例格式字符串(假设QTime为14:13:09.042)
格式 | 结果 |
---|---|
hh:mm:ss.zzz | 14:13:09.042 |
h:m:s ap | 2:13:9 pm |
H:m:s a | 14:13:9 pm |
如果时间无效,将返回空字符串。
注意: 要获取本地化的AM或PM形式(AP、ap、A、a、aP或Ap格式),请使用QLocale::system().toString。
注意: 如果格式字符重复次数多于上表中使用它的最长表达式次数,则格式的一部分将被读取为几个没有分隔符的表达式;最长的是上面,可能重复与它的副本一样多次,最后结尾可能是一个较短的表达式。因此,对于时间为08:00的'HHHHH'
,将向输出贡献"08088"
。
另请参阅 fromString,QDate::toString,QDateTime::toString,和QLocale::toString。
[constexpr]
QTime::QTime()
构造一个空时间对象。对于空时间,isNull() 返回 true
,而 isValid() 返回 false
。如果需要零时间,请使用 QTime(0, 0)。关于一天的开始,请参见 QDate::startOfDay。
QTime::QTime(int h, int m, int s = 0, int ms = 0)
构造一个具有小时 h、分钟 m、秒数 s 和毫秒数 ms 的时间。
h 必须在 0 到 23 的范围内,m 和 s 必须在 0 到 59 的范围内,ms 必须在 0 到 999 的范围内。
另请参阅isValid。
QTime QTime::addMSecs(int ms) const
返回一个 QTime 对象,该对象的时间比该对象的时间晚 ms 毫秒(如果是负数,则表示较早)。
请注意,如果时间超过了午夜,时间会回绕。有关示例,请参见 addSecs。
如果此时间是无效的,则返回空时间。
另请参阅addSecs、msecsTo 和 QDateTime::addMSecs。
QTime QTime::addSecs(int s) const
返回一个 QTime 对象,该对象的时间比该对象的时间晚 s 秒(如果是负数,则表示较早)。
请注意,如果时间超过了午夜,时间会回绕。
如果此时间是无效的,则返回空时间。
示例
QTime n(14, 0, 0); // n == 14:00:00 QTime t; t = n.addSecs(70); // t == 14:01:10 t = n.addSecs(-70); // t == 13:58:50 t = n.addSecs(10 * 60 * 60 + 5); // t == 00:00:05 t = n.addSecs(-15 * 60 * 60); // t == 23:00:00
另请参阅addMSecs、secsTo 和 QDateTime::addSecs。
[static]
QTime QTime::currentTime()
返回系统时钟报告的当前时间。
注意,精度取决于底层操作系统的精度;并非所有系统都提供 1 毫秒的精度。
此外,currentTime() 在每天之内只增加;每当午夜通过时,它将下降 24 小时;如果发生夏令时转换,除此之外,它的变化可能不会对应于经过的时间。
另请参阅QDateTime::currentDateTime 和 QDateTime::currentDateTimeUtc。
[static constexpr]
QTime QTime::fromMSecsSinceStartOfDay(int msecs)
返回一个新 QTime 实例,该实例的时间设置为从当天开始(即 00:00:00)以来的 msecs。
如果 msecs 落在有效范围之外,将返回一个无效的 QTime。
另请参阅msecsSinceStartOfDay。
[static]
QTime QTime::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
根据给定的格式将表示时间的字符串转换为 QTime,如果不可能,则返回一个无效的时间。
另请参阅 toString() 和 QLocale::toTime 函数。
[静态,自6.0以来]
QTime QTime::fromString(QStringView string, Qt::DateFormat format = Qt::TextDate)
这是一个重载函数。
此函数在 Qt 6.0 中引入。
[静态,自6.0以来]
QTime QTime::fromString(QStringView string, QStringView format)
这是一个重载函数。
此函数在 Qt 6.0 中引入。
[静态,自6.0以来]
QTime QTime::fromString(const QString &string, QStringView format)
这是一个重载函数。
此函数在 Qt 6.0 中引入。
[静态]
QTime QTime::fromString(const QString &string, const QString &format)
使用给定的格式将 string 转换为 QTime,如果字符串无法解析,则返回无效的时间。
以下表达式可用于格式
表达式 | 输出 |
---|---|
h | 没有前导零的小时(0到23或1到12如果显示AM/PM) |
hh | 带前导零的小时(00到23或01到12如果显示AM/PM) |
H | 没有前导零的小时(0到23,即使显示AM/PM) |
HH | 带前导零的小时(00到23,即使显示AM/PM) |
m | 没有前导零的分钟(0到59) |
mm | 带前导零的分钟(00到59) |
s | 完整的秒,没有前导零(0到59) |
ss | 完整的秒,在有前导零的情况下适用(00到59) |
z或zz | 秒的分数部分,通常跟在十进制点后面,不需要尾随零(0至999)。因此 "s.z" 匹配最多三位小数部分的秒,提供毫秒精度,不需要尾随零。例如,"s.z" 识别 "00.250" 或 "0.25" 作为代表该分钟的十五秒。 |
zzz | 秒的小数部分为三位,精确到毫秒,包括需要时尾随零(000至999)。例如,"ss.zzz" 会拒绝 "0.25" 但识别 "00.250" 作为代表该分钟的十五秒。 |
AP, A, ap, a, aP 或 Ap | 要么 'AM' 表示12:00之前的时刻,要么 'PM' 表示之后的时间,不区分大小写。 |
所有其他输入字符都将被视为文本。任何用单引号包围的非空字符序列也将视为文本(去除引号)而不是表达式。
QTime time = QTime::fromString("1mm12car00", "m'mm'hcarss"); // time is 12:01.00
如果格式不符合要求,则返回一个无效的 QTime。不期望给出前导零的表达式(h、m、s和z)是贪婪的。这意味着即使这使它们超出接受的值范围并留下太多的数字供其他部分使用,它们也会使用两位数(或者z为三位数)。例如,以下字符串可以意味着00:07:10,但m会抓取两个数字,结果是一个无效的时间
QTime time = QTime::fromString("00:710", "hh:ms"); // invalid
没有在格式中表示的字段将设置为0。例如
QTime time = QTime::fromString("1.30", "m.s"); // time is 00:01:30.000
注意:如果需要识别本地化的am或pm(AP、ap、Ap、aP、A或a格式)形式,请使用 QLocale::system().toTime()。
注意:如果格式字符重复的次数超过表格中使用它的最长表达式次数,则格式中的这部分将以没有分隔符的多个表达式读取;最长的表达式可能重复与它的副本数量一样多,以一个可能较短的短语结束。因此,'HHHHH'
将匹配"08088"
或 "080808"
并将小时设置为8;如果时间字符串包含"070809",则它将"匹配"但是产生不一致的结果,导致无效的时间。
另请参阅 toString()、QDateTime::fromString()、QDate::fromString()、QLocale::toTime() 和 QLocale::toDateTime。
int QTime::hour() const
返回时间的时部分(0到23)。
如果时间是无效的,则返回-1。
另请参阅 minute()、second() 和 msec。
[constexpr]
bool QTime::isNull() const
如果时间是null(即,QTime对象使用默认构造函数构造),则返回true;否则返回false。无效的时间也是null时间。
另请参阅isValid。
bool QTime::isValid() const
如果时间是有效的,则返回true;否则返回false
。例如,时间23:30:55.746是有效的,但24:12:30是无效的。
另请参阅 isNull。
[static]
bool QTime::isValid(int h, int m, int s, int ms = 0)
这是一个重载函数。
如果指定的时间是有效的,则返回true;否则返回false。
时间有效当h在0到23的范围内,m和s在0到59的范围内,ms在0到999的范围内。
示例
QTime::isValid(21, 10, 30); // returns true QTime::isValid(22, 5, 62); // returns false
int QTime::minute() const
返回时间的分钟部分(0到59)。
如果时间是无效的,则返回-1。
int QTime::msec() const
返回时间的毫秒部分(0到999)。
如果时间是无效的,则返回-1。
另请参阅 hour()、minute() 和 second。
[constexpr]
int QTime::msecsSinceStartOfDay() const
返回自一天开始以来的毫秒数,即自00:00:00以来。
另请参阅 fromMSecsSinceStartOfDay。
int QTime::msecsTo(QTime t) const
返回从该时间到t的毫秒数。如果t早于这个时间,则返回的毫秒数是负数。
因为QTime在一天内测量时间,一天中有86,400秒,所以结果总是在-86,400,000和86,400,000毫秒之间。
如果任一时间无效则返回0。
另请参阅: secsTo()、addMSecs()以及QDateTime::msecsTo()。
int QTime::second() const
返回时间的第二部分(0到59)。
如果时间是无效的,则返回-1。
另请参阅: hour()、minute()以及msec()。
int QTime::secsTo(QTime t) const
返回从当前时间到时间
由于QTime在一天内测量时间,每天有86400秒,因此结果总是在-86400到86400之间。
secsTo()不考虑任何毫秒数。
如果任一时间无效则返回0。
另请参阅: addSecs()和QDateTime::secsTo()。
bool QTime::setHMS(int h, int m, int s, int ms = 0)
将时间设置为零h小时、零m分钟、零s秒和零ms毫秒。
h必须在0到23之间,m和s必须在0到59之间,而ms必须在0到999之间。如果设置的时间有效则返回true
,否则返回false
。
另请参阅isValid。
QString QTime::toString(Qt::DateFormat format = Qt::TextDate) const
这是一个重载函数。
以字符串形式返回时间。参数format决定字符串的格式。
如果format是Qt::TextDate,字符串格式为HH:mm:ss;例如,午夜前1秒将是"23:59:59"。
如果format是Qt::ISODate,字符串格式对应ISO 8601扩展规范中表示日期的方式,表示为HH:mm:ss。要包括ISO 8601日期中的毫秒,请使用格式format Qt::ISODateWithMs,对应HH:mm:ss.zzz。
如果格式是Qt::RFC2822Date,字符串将以RFC 2822兼容的方式进行格式化。这种格式的示例是"23:59:20"。
如果时间无效,将返回空字符串。
另请参阅 fromString,QDate::toString,QDateTime::toString,和QLocale::toString。
相关非成员
[constexpr noexcept]
bool operator!=(const QTime &lhs, const QTime &rhs)
如果lhs与rhs不同,则返回true
;否则返回false
。
[constexpr noexcept]
bool operator<(const QTime &lhs, const QTime &rhs)
如果lhs早于rhs,则返回true
;否则返回false
。
QDataStream &operator<<(QDataStream &out, QTime time)
将时间写入流out。
另请参阅序列化 Qt 数据类型。
[constexpr noexcept]
bool operator<=(const QTime &lhs, const QTime &rhs)
如果lhs早于或等于rhs,则返回true
;否则返回false
。
[constexpr noexcept]
bool operator==(const QTime &lhs, const QTime &rhs)
如果lhs等于rhs,则返回true
;否则返回false
。
[constexpr noexcept]
bool operator>(const QTime &lhs, const QTime &rhs)
如果lhs晚于rhs,则返回true
;否则返回false
。
[constexpr noexcept]
bool operator>=(const QTime &lhs, const QTime &rhs)
如果lhs晚于或等于rhs,则返回true
;否则返回false
。
QDataStream &operator>>(QDataStream &in, QTime &time)
从流in读取时间到给定的time中。
另请参阅序列化 Qt 数据类型。
© 2024 The Qt Company Ltd. 此处包含的文档贡献的版权归其所有者所有。此处提供的文档根据自由软件基金会发布的GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 及其相关标识是 The Qt Company Ltd. 在芬兰和/或全球其他国家和地区的商标。所有其他商标均为其各自所有者的财产。