本页内容

QTime Class

QTime 类提供了时钟时间相关功能。更多内容...

头文件: #include <QTime>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:该类中的所有函数均为可重入的。

QTime 比较

类别可比较类型
strongQTime

公共函数

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(QStringView format) const
QString toString(Qt::DateFormat format = Qt::TextDate) const

静态公共成员

QTime currentTime()
QTime fromMSecsSinceStartOfDay(int msecs)
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)
QTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
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 。

另请参阅 QDate 和QDateTime 。

成员函数文档

[constexpr] QTime::QTime()

构建一个空时间对象。对于空时间,isNull() 返回true ,而isValid() 返回false 。如果需要零时间,请使用 QTime(0, 0)。关于一天的开始时间,请参阅QDate::startOfDay()。

另请参阅 isNull() 和isValid()。

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 毫秒的时间(如果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, const QString &format)

返回由字符串string 所表示的QTime ,使用给定的format 进行解析;如果无法解析该字符串,则返回无效时间。

以下表达式可用于该格式:

表达式输出
h不带前导零的小时(0 到 23,若显示 AM/PM 则为 1 到 12)
hh带前导零的小时(00 至 23,若采用 AM/PM 显示则为 01 至 12)
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表示 12:00 之前时间的 'AM' 或 12:00 之后时间的 'PM',匹配时不区分大小写。

任何用单引号括起的非空字符序列也将被视为文本(去掉引号),而不会被解释为表达式。 两个连续的单引号("''")将被视为一个单引号,用于与输入内容匹配,而不是作为原样序列的开始或结束。所有其他输入字符都将被视为原样文本,用于与输入字符串进行匹配。例如:

QTime time = QTime::fromString("1mm12car00", "m'mm'hcarss");
// time is 12:01.00

如果格式不符,将返回一个无效的QTime 。

当数字字段紧邻排列且没有分隔符来分割数字序列时,可能会出现歧义:某些允许使用一位数的字段是否应使用两位数(因为要表示的值大于9)。 若为该字段分配两位数会导致其他字段可用位数不足,且单个位数的读数与其他字段一致,则可解决此歧义。 否则(即当多个字段允许仅使用一位数,且若每个字段仅使用一位数时仍会有剩余位数),在数据保持一致的前提下,优先采用将额外位数分配给前序字段的处理方式,而非分配给后序字段。例如:

QTime time = QTime::fromString("00:710", "hh:ms"); // 7 mins, 10 secs after midnight

任何未在该格式中表示的字段将被设为零。例如:

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()。

[static, since 6.0] QTime QTime::fromString(QStringView string, QStringView format)

该函数重载了QTime::fromString()。

该函数在 Qt 6.0 中引入。

[static, since 6.0] QTime QTime::fromString(QStringView string, Qt::DateFormat format = Qt::TextDate)

该函数重载了QTime::fromString()。

该函数在 Qt 6.0 中引入。

[static, since 6.0] QTime QTime::fromString(const QString &string, QStringView format)

该函数重载了QTime::fromString()。

该函数在 Qt 6.0 中引入。

[static] QTime QTime::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)

使用给定的format ,将string 中表示的时间转换为QTime ,若无法转换,则返回无效时间。

这是一个重载函数。

另请参阅 toString() 和QLocale::toTime()。

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 之间,则该时间有效。

示例:

QTime::isValid(21, 10, 30); // returns true
QTime::isValid(22, 5,  62); // returns false

该函数重载了QTime::isValid()。

int QTime::minute() const

返回时间的分钟部分(0 到 59)。

如果时间无效,则返回 -1。

另请参阅 hour()、second() 和msec()。

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。

另请参阅 hour()、minute() 和msec()。

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 之间,m 和s 必须在 0 到 59 之间,ms 必须在 0 到 999 之间。如果设置的时间有效,则返回true ;否则返回false 。

另请参阅 isValid()。

QString QTime::toString(const QString &format) const

QString QTime::toString(QStringView format) const

返回一个表示时间的字符串。

format 参数决定结果字符串的格式。如果时间无效,将返回一个空字符串。

可使用以下表达式:

表达式输出
h不带前导零的小时(0 至 23,若采用 AM/PM 显示则为 1 至 12)
hh带前导零的小时(00 至 23;若采用上午/下午显示,则为 01 至 12)
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" 在时间达到一分钟的四分之一秒时,会生成"0.25" 。
zzz秒的分数部分,精确到毫秒,必要时包含尾随零(000 至 999)。例如,"ss.zzz" 对于进入第 1 分钟后第 1/4 秒的时间,将返回"00.250" 。
AP 或 A使用 AM/PM 显示。A/AP 将被替换为 'AM' 或 'PM'。在本地化形式中(仅与QLocale::toString() 相关),符合区域设置的文本将转换为大写。
ap 或 a使用上午/下午显示。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 标识符(例如“Europe/Berlin”)。 该名称可能无法表明该日期时间是夏令时还是标准时间,如果该日期时间落在因两种时制转换而重复的小时内,这可能会导致歧义。

注意:若要 获取 AM 或 PM 的本地化形式(AP 、ap 、A 、a 、aP 或Ap 格式),或时区表示形式的本地化版本(t 格式),请使用QLocale::system()。toString()。

当无法确定时区或没有合适的时区表示形式时,表示时区的t 形式可能会被跳过。有关何时返回空字符串的详细信息,请参阅QTimeZone::displayName()。

任何用单引号括起的非空字符序列都将原样包含在输出字符串中(去除引号),即使其中包含格式化字符也是如此。 两个连续的单引号("''")在输出中会被替换为一个单引号,而不是作为原样序列的开始或结束。格式字符串中的所有其他字符都会原样包含在输出字符串中。

支持不带分隔符的格式(例如 "hhmm"),但必须谨慎使用,因为生成的字符串并不总是可靠可读的(例如,如果 "Hm" 生成 "212",它可能表示 02:12 或 21:02)。

格式字符串示例(假设QTime 为14:13:09.042)

格式结果
hh:mm:ss.zzz14:13:09.042
h:m:s ap下午 2:13:9
H:m:s a下午 14:13:9

注意:如果 某个格式字符的重复次数超过了上表中使用该字符的最长表达式,则该格式部分将被解读为多个不带分隔符的表达式;其中包含上表中的最长表达式(可能重复该表达式出现的所有次数),并以一个可能较短的表达式作为尾部。 因此,对于时间 08:00,'HHHHH' 将生成输出"08088" 。

另请参阅 fromString()、QDate::toString()、QDateTime::toString() 和QLocale::toString()。

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”。

如果时间无效,则返回一个空字符串。

此函数重载了QTime::toString()。

另请参阅 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 数据类型的序列化》。

© 2026 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.