QTime Class
QTime 类提供时钟时间函数。更多
Header: | #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(QStringView format) const |
QString | toString(const QString &format) const |
QString | toString(Qt::DateFormat format = Qt::TextDate) const |
静态公共成员
QTime | currentTime() |
QTime | fromMSecsSinceStartOfDay(int msecs) |
QTime | fromString(const QString &string, Qt::DateFormat format = Qt::TextDate) |
QTime | fromString(const QString &string, const QString &format) |
(since 6.0) QTime | fromString(QStringView string, QStringView format) |
(since 6.0) QTime | fromString(QStringView string, Qt::DateFormat format = Qt::TextDate) |
(since 6.0) QTime | fromString(const QString &string, QStringView 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。
还可以使用fromString() 从文本表示法创建 QTime 对象,并使用toString() 将其转换为字符串表示法。所有字符串格式之间的转换都使用 C 语言本地化。有关本地化转换,请参见QLocale 。
成员函数文档
QString QTime::toString(QStringView format) const
QString QTime::toString(const QString &format) const
返回代表时间的字符串。
format 参数决定结果字符串的格式。如果时间无效,则返回空字符串。
可以使用这些表达式:
表达式 | 输出 |
---|---|
h | 不带前导零的小时(0 至 23,如果显示 AM/PM,则为 1 至 12) |
hh | 有前导零的小时(00 至 23,如果是 AM/PM 显示,则为 01 至 12) |
H | 不带前导零的小时(0 至 23,AM/PM 显示时也是如此) |
小时 | 有前导零的小时(00 至 23,即使是 AM/PM 显示模式) |
m | 不带前导零的分钟(0 至 59) |
毫米 | 有前导零的分钟(00 至 59) |
s | 整秒,不带前导零(0 至 59) |
秒 | 整秒,带前导零(00 至 59) |
z 或 zz | 秒的小数部分,位于小数点后,不带尾零。因此,"s.z" 报告的秒数精度为可用的整数(毫秒),不带尾零(0 至 999)。例如,"s.z" 将生成"0.25" ,显示时间为四分之一秒到一分钟。 |
zzz | 秒的小数部分,毫秒精度,包括尾数零(000 至 999)。例如,"ss.zzz" 将产生"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")。请注意,时区缩写不是唯一的。尤其是fromString() 无法解析。 |
tt | 时区与 UTC 的偏移量,小时和分钟之间不加冒号(例如 "+0200")。 |
ttt | 时区从 UTC 的偏移量,小时和分钟之间有冒号(例如 "+02:00")。 |
tttt | 时区名称,由QTimeZone::displayName() 提供,类型为QTimeZone::LongName 。这可能取决于所使用的操作系统。如果没有此类名称,则可使用该时区的 IANA ID(如 "欧洲/柏林")。这可能无法说明日期时间是在夏令时还是标准时间,如果日期时间位于两者之间过渡的小时内,可能会导致歧义。 |
注: 要获取 AM 或 PM 的本地化形式(AP
,ap
,A
,a
,aP
或Ap
格式)或时区表示形式(t
格式),请使用QLocale::system().toString().
当无法确定时区或没有合适的时区表示法时,可以跳过t
表示法。关于何时返回空字符串,请参阅QTimeZone::displayName() 。
任何用单引号括起来的非空字符序列都将逐字包含在输出字符串中(去掉引号),即使其中包含格式化字符。在输出中,两个连续的单引号("''")会被一个单引号取代。格式字符串中的所有其他字符将逐字包含在输出字符串中。
支持不带分隔符的格式(如 "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 |
h:m:s a | 14:13:9 pm |
注意: 如果格式字符的重复次数超过上表中使用该字符的最长表达式的重复次数,则格式的这一部分将被读作多个表达式,它们之间没有分隔符;上述最长表达式的重复次数可能与该表达式的重复次数一样多,最后以一个可能是较短表达式的残差结束。因此,时间为 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 的范围内, 和 必须在 0 至 59 的范围内, 必须在 0 至 999 的范围内。m s ms
另请参阅 isValid() 。
QTime QTime::addMSecs(int ms) const
返回一个QTime 对象,其中包含一个比该对象的时间晚ms 毫秒的时间(如果ms 为负数,则返回更早的时间)。
需要注意的是,如果时间过了午夜,则会被换行。示例参见addSecs() 。
如果时间无效,则返回空时间。
另请参阅 addSecs()、msecsTo() 和QDateTime::addMSecs()。
QTime QTime::addSecs(int s) const
返回一个QTime 对象,其中包含一个比该对象时间晚s 秒的时间(如果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)
使用给定的format 将string 中代表的时间返回为QTime ,如果无法返回,则返回无效时间。
另请参阅 toString() 和QLocale::toTime()。
[static]
QTime QTime::fromString(const QString &string, const QString &format)
使用给出的format 返回string 所代表的QTime ,如果字符串无法解析,则返回无效时间。
格式可以使用这些表达式:
表达式 | 输出 |
---|---|
h | 不带前导零的小时(0 至 23,如果显示 AM/PM,则为 1 至 12) |
hh | 有前导零的小时(00 至 23,如果是 AM/PM 显示,则为 01 至 12) |
H | 不带前导零的小时(0 至 23,AM/PM 显示时也是如此) |
小时 | 有前导零的小时(00 至 23,即使是 AM/PM 显示模式) |
m | 不带前导零的分钟(0 至 59) |
毫米 | 有前导零的分钟(00 至 59) |
s | 整秒,不带前导零(0 至 59) |
秒 | 整秒,带前导零(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 "表示 12:00 之后的时间,不区分大小写。 |
所有其他输入字符将被视为文本。任何用单引号括起来的非空字符序列也将被视为文本(去掉引号),而不会被解释为表达式。
如果格式不符合要求,将返回无效的QTime 。不希望给出前导零的表达式(h、m、s 和 z)是贪心的。这意味着它们将使用两位数(或三位数,对于 z),即使这会使它们超出可接受值的范围,并给其他部分留下太少的位数。例如,下面的字符串可能表示 00:07:10,但 m 会抓取两位数,导致时间无效:
格式中未表示的任何字段都将设为零。例如
注意: 如果要识别 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()。
[static, since 6.0]
QTime QTime::fromString(QStringView string, QStringView format)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
[static, since 6.0]
QTime QTime::fromString(QStringView string, Qt::DateFormat format = Qt::TextDate)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
[static, since 6.0]
QTime QTime::fromString(const QString &string, QStringView format)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
int QTime::hour() const
返回时间的小时部分(0 至 23)。
如果时间无效,则返回-1。
另请参阅 minute()、second() 和msec()。
[constexpr]
bool QTime::isNull() const
如果时间为空(即QTime 对象是使用默认构造函数构造的),则返回true
;否则返回 false。空时间也是无效时间。
另请参阅 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,则时间有效。
示例
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 测量的是一天内的时间,而一天有 86400 秒,因此结果总是介于 -86400000 和 86400000 毫秒之间。
如果时间无效,则返回 0。
另请参阅 secsTo()、addMSecs() 和QDateTime::msecsTo()。
int QTime::second() const
返回时间的第二部分(0 至 59)。
如果时间无效,则返回-1。
int QTime::secsTo(QTime t) const
返回从此时到t 的秒数。如果t 早于此时,则返回的秒数为负数。
由于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 的范围内, 和 必须在 0 至 59 的范围内, 必须在 0 至 999 的范围内。如果设置的时间有效,则返回 ;否则返回 。m s ms 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。
如果format 是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)
将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 数据类型。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.