QDateTime Class
QDateTime 类提供日期和时间函数。更多
Header: | #include <QDateTime> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- 所有成员(包括继承成员)的列表
- 已废弃成员
- QDateTime 属于隐式共享类。
该类具有弱可比性。
注意:该类中的所有函数都是可重入的。
公共类型
(since 6.7) enum class | TransitionResolution { Reject, RelativeToBefore, RelativeToAfter, PreferBefore, PreferAfter, …, LegacyBehavior } |
enum class | YearRange { First, Last } |
公共函数
QDateTime() | |
QDateTime(QDate date, QTime time, const QTimeZone &timeZone, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior) | |
(since 6.5) | QDateTime(QDate date, QTime time, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior) |
QDateTime(const QDateTime &other) | |
QDateTime(QDateTime &&other) | |
~QDateTime() | |
QDateTime | addDays(qint64 ndays) const |
(since 6.4) QDateTime | addDuration(std::chrono::milliseconds msecs) const |
QDateTime | addMSecs(qint64 msecs) const |
QDateTime | addMonths(int nmonths) const |
QDateTime | addSecs(qint64 s) const |
QDateTime | addYears(int nyears) const |
QDate | date() const |
qint64 | daysTo(const QDateTime &other) const |
bool | isDaylightTime() const |
bool | isNull() const |
bool | isValid() const |
qint64 | msecsTo(const QDateTime &other) const |
int | offsetFromUtc() const |
qint64 | secsTo(const QDateTime &other) const |
void | setDate(QDate date, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior) |
void | setMSecsSinceEpoch(qint64 msecs) |
void | setSecsSinceEpoch(qint64 secs) |
void | setTime(QTime time, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior) |
void | setTimeZone(const QTimeZone &toZone, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior) |
void | swap(QDateTime &other) |
QTime | time() const |
(since 6.5) QTimeZone | timeRepresentation() const |
Qt::TimeSpec | timeSpec() const |
QTimeZone | timeZone() const |
QString | timeZoneAbbreviation() const |
CFDateRef | toCFDate() const |
QDateTime | toLocalTime() const |
qint64 | toMSecsSinceEpoch() const |
NSDate * | toNSDate() const |
QDateTime | toOffsetFromUtc(int offsetSeconds) const |
qint64 | toSecsSinceEpoch() const |
(since 6.4) std::chrono::sys_time<std::chrono::milliseconds> | toStdSysMilliseconds() const |
(since 6.4) std::chrono::sys_seconds | toStdSysSeconds() const |
QString | toString(QStringView format, QCalendar cal) const |
QString | toString(const QString &format, QCalendar cal) const |
QString | toString(QStringView format) const |
QString | toString(Qt::DateFormat format = Qt::TextDate) const |
QString | toString(const QString &format) const |
QDateTime | toTimeZone(const QTimeZone &timeZone) const |
QDateTime | toUTC() const |
(since 6.4) QDateTime & | operator+=(std::chrono::milliseconds duration) |
(since 6.4) QDateTime & | operator-=(std::chrono::milliseconds duration) |
QDateTime & | operator=(const QDateTime &other) |
静态公共成员
(since 6.5) QDateTime | currentDateTime(const QTimeZone &zone) |
QDateTime | currentDateTime() |
QDateTime | currentDateTimeUtc() |
qint64 | currentMSecsSinceEpoch() |
qint64 | currentSecsSinceEpoch() |
QDateTime | fromCFDate(CFDateRef date) |
QDateTime | fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone) |
QDateTime | fromMSecsSinceEpoch(qint64 msecs) |
QDateTime | fromNSDate(const NSDate *date) |
QDateTime | fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone) |
QDateTime | fromSecsSinceEpoch(qint64 secs) |
(since 6.4) QDateTime | fromStdLocalTime(const std::chrono::local_time<std::chrono::milliseconds> &time) |
(since 6.4) QDateTime | fromStdTimePoint(const std::chrono::local_time<std::chrono::milliseconds> &time) |
(since 6.4) QDateTime | fromStdTimePoint(const std::chrono::time_point<Clock, Duration> &time) |
(since 6.4) QDateTime | fromStdTimePoint(std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> time) |
(since 6.4) QDateTime | fromStdZonedTime(const int &time) |
QDateTime | fromString(const QString &string, Qt::DateFormat format = Qt::TextDate) |
QDateTime | fromString(const QString &string, const QString &format, int baseYear, QCalendar cal) |
(since 6.0) QDateTime | fromString(QStringView string, Qt::DateFormat format = Qt::TextDate) |
(since 6.0) QDateTime | fromString(QStringView string, QStringView format, QCalendar cal) |
(since 6.7) QDateTime | fromString(QStringView string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear) |
(since 6.0) QDateTime | fromString(const QString &string, QStringView format, QCalendar cal) |
(since 6.7) QDateTime | fromString(const QString &string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear) |
QDateTime | fromString(const QString &string, const QString &format, QCalendar cal) |
(since 6.7) QDateTime | fromString(const QString &string, const QString &format, int baseYear = QLocale::DefaultTwoDigitBaseYear) |
(since 6.7) QDateTime | fromString(QStringView string, QStringView format, int baseYear, QCalendar cal) |
(since 6.0) QDateTime | fromString(const QString &string, QStringView format, int baseYear, QCalendar cal) |
相关非成员
bool | operator!=(const QDateTime &lhs, const QDateTime &rhs) |
(since 6.4) QDateTime | operator+(const QDateTime &dateTime, std::chrono::milliseconds duration) |
(since 6.4) QDateTime | operator+(std::chrono::milliseconds duration, const QDateTime &dateTime) |
(since 6.4) std::chrono::milliseconds | operator-(const QDateTime &lhs, const QDateTime &rhs) |
(since 6.4) QDateTime | operator-(const QDateTime &dateTime, std::chrono::milliseconds duration) |
bool | operator<(const QDateTime &lhs, const QDateTime &rhs) |
QDataStream & | operator<<(QDataStream &out, const QDateTime &dateTime) |
bool | operator<=(const QDateTime &lhs, const QDateTime &rhs) |
bool | operator==(const QDateTime &lhs, const QDateTime &rhs) |
bool | operator>(const QDateTime &lhs, const QDateTime &rhs) |
bool | operator>=(const QDateTime &lhs, const QDateTime &rhs) |
QDataStream & | operator>>(QDataStream &in, QDateTime &dateTime) |
详细说明
QDateTime 对象根据时间表示法对日历日期和时钟时间("datetime")进行编码。它结合了QDate 和QTime 类的功能。它可以从系统时钟读取当前日期时间。它提供了用于比较日期时间和通过添加秒数、天数、月数或年数来操作日期时间的函数。
QDateTime 可以描述相对于local time 、相对于UTC 、相对于指定的offset from UTC 或相对于指定的time zone 的日期时间。这些时间表示法中的每一种都可以封装在QTimeZone 类的一个合适实例中。例如,"欧洲/柏林 "时区将采用德国的夏令时规则。相反,UTC+3600 秒的固定偏移量则比UTC 提前一小时(通常用 ISO 标准符号写为 "UTC+01:00"),而且没有夏令时的复杂性。在使用当地时间或指定时区时,会考虑时区转换(参见below )。QDateTime 的timeSpec() 会告诉您使用的是四种时间表示法中的哪一种;它的timeRepresentation() 会以QTimeZone 的形式提供对该时间表示法的完整描述。
创建 QDateTime 对象时,通常在构造函数中明确给出日期和时间,或使用currentDateTime() 或fromMSecsSinceEpoch() 等静态函数。日期和时间可通过setDate() 和setTime() 更改。还可以使用setMSecsSinceEpoch() 函数设置日期时间,该函数以毫秒为单位获取自 1970 年(UTC)开始的时间。fromString() 函数根据字符串和用于解释字符串中日期的日期格式返回 QDateTime。
QDateTime::currentDateTime()函数返回一个 QDateTime,它表达了相对于特定时间表示的当前日期和时间,例如当地时间(默认值)。QDateTime::currentDateTimeUtc() 返回的 QDateTime 表示当前日期和时间相对于 UTC 的时间;它等同于QDateTime::currentDateTime(QTimeZone::UTC)
。
date() 和time() 函数提供了对日期和时间部分的访问。toString() 函数以文本格式提供相同的信息。
QDateTime 提供了一整套操作符来比较两个 QDateTime 对象,其中较小的表示较早,较大的表示较晚。
您可以使用addMSecs() 按给定的毫秒数递增(或递减)日期时间,使用addSecs() 按给定的秒数递增(或递减)日期时间,使用addDays() 按给定的天数递增(或递减)日期时间。同样,您也可以使用addMonths() 和addYears()。daysTo() 函数返回两个日期之间的天数,secsTo() 返回两个日期之间的秒数,msecsTo() 返回两个日期之间的毫秒数。这些操作会考虑夏令时(DST)和其他时区转换(如适用)。
使用toTimeZone() 可以用不同的时间表示法重新表达日期时间。通过传递表示当地时间、UTC 或从 UTC 固定偏移的轻量级QTimeZone ,可以将日期时间转换为使用相应的时间表示法;也可以传递完整的时区(其timeSpec() 是Qt::TimeZone
),以使用该时区代替日期时间。
备注
注意: QDateTime 不考虑闰秒。
注意: 所有字符串格式之间的转换都是使用 C locale 完成的。有关本地化转换,请参阅QLocale 。
注: 公历中没有 0 年。该年的日期被视为无效。年-1 表示 "公元前 1 年 "或 "公元前 1 年"。公元前 1 年 1 月 1 日的前一天是公元前 1 年 12 月 31 日。
注: 使用当地时间(默认)或指定时区意味着需要解决与transitions 有关的任何问题。因此,对此类 QDateTime 实例的操作(主要包括构建实例)可能比使用 UTC 或 UTC 固定偏移量时的操作更昂贵。
有效日期范围
QDateTime 可表示的数值范围取决于内部存储实现。QDateTime 目前存储在 qint64 中,作为编码日期和时间的序列 msecs 值。这将日期范围限制在大约 ±2.92 亿年,而QDate 的范围是 ±20 亿年。在创建具有极端值的 QDateTime 时,必须注意不要溢出存储空间。支持值的确切范围因所使用的时间表示法而异。
时区的使用
QDateTime 使用系统的时区信息来确定当前的本地时区及其与 UTC 的偏移量。如果系统配置不正确或不是最新的,QDateTime 就会给出错误的结果。
QDateTime 同样使用系统提供的信息来确定其他时区与 UTC 的偏移量。如果这些信息不完整或过时,QDateTime 将给出错误的结果。更多详情,请参阅QTimeZone 文档。
在现代 Unix 系统上,这意味着 QDateTime 通常会尽可能提供有关历史转换(包括 DST,见下文)的准确信息。在 Windows 系统上,由于系统不支持历史时区数据,因此在时区转换(尤其包括 DST)方面无法保持历史准确性。不过,使用 ICU 库构建 Qt 将为QTimeZone 配备与 Unix 上相同的时区数据库。
时区转换
QDateTime 会考虑时区转换,包括标准时间和夏令时(DST)之间的转换,以及一个地区改变其标准偏移时产生的转换。例如,如果过渡时间是凌晨 2 点,时钟前进到凌晨 3 点,那么从 02:00:00 到 02:59:59.999,就会 "缺少 "一个小时。这种过渡被称为 "向前跳转",跳过的时间没有任何意义。反之,即所谓的 "回落 "时,一个时间间隔会重复出现,先是旧区(通常是 DST),然后是新区(通常是标准时间),因此这个时间间隔内的时间是模糊的。
有些地区使用 "反向 "夏令时,即夏季使用标准时间,冬季使用夏令时(偏移量降低)。对于这些地区来说,春季前进时间仍然发生在春季,并跳过一个小时,但这是夏令时的过渡,而秋季后退时间仍然重复秋季的一个小时,但这是夏令时的过渡。
从UTC 时间(或与UTC 有固定偏移的时间)转换时,在任何时区都会有一个明确有效的结果。然而,当把日期和时间组合成一个日期时间(以当地时间或特定时区表示)时,标称结果可能会出现过渡,从而使其无效或含糊不清。可能会出现这种情况的方法会使用resolve
参数:如果请求的日期时间有效且明确,则该参数会被忽略。请参阅TransitionResolution ,了解它允许您控制的选项。在 Qt XML 6.7 之前,相当于选择了其LegacyBehavior 。
对于 Spring forward 跳过的时间间隔,用任一偏移量解释所请求的时间,都会得到另一个偏移量正在使用的实际时间;因此,为resolve
传递TransitionResolution::RelativeToBefore
实际上会得到转换后的时间,如果转换没有发生,该时间就会具有所请求的表示法。同样,将TransitionResolution::RelativeToAfter
传递给resolve
会得到一个过渡前的时间,如果过渡发生得更早,这个时间就会有所需的表示。
当 QDateTime 执行算术运算(如 addDay() 或addSecs() )时,它会注意产生有效的结果。例如,在一个从 02:00 向 03:00 跳转的日期,将 01:59:59 加一秒将得到 03:00:00。将前一天的 02:30 加一天将得到转换当天的 03:30,而通过调用addDay(-1)
将第二天的 02:30 减一天将得到转换当天的 01:30。addSecs() 会将时间偏移给定的秒数,而addDays() 只调整日期,只有在结果无效时才调整时间。将addDays(1)
应用于春运前一天的 03:00,只会得到春运当天的 03:00,尽管后者只比前者晚 23 小时;但addSecs(24 * 60 * 60)
会得到春运当天的 04:00,因为那是 24 小时之后。典型的转换会使某些日子长达 23 或 25 小时。
对于系统time_t
可以表示的日期时间(在使用 32 位time_t
的系统上从 1901-12-14 到 2038-01-18;如果类型是 64 位,则 QDateTime 可以表示的全部范围),将使用标准系统 API 来确定本地时间与 UTC 的偏移量。对于这些系统 API 无法处理的日期时间(可能包括time_t
范围内的一些日期时间),如果可用,则使用QTimeZone::systemTimeZone() 或尽力估算。在任何情况下,所使用的偏移信息都取决于系统,可能不完整,或者对于过去的时间,历史上不准确。此外,对于未来的日期,当地时区的偏移量和 DST 规则可能会在该日期到来之前发生变化。
全天转换
少数时区在移动国际日期变更线时会跳过或重复整日。对于这些情况,daysTo() 将不知道重复或间隙,只是使用日历日期的差异;相反,msecsTo() 和secsTo() 则知道真正的时间间隔。同样,addMSecs() 和addSecs() 直接对应的是经过时间,而addDays() 、addMonths() 和addYears() 遵循的是名义日历,除非在出现空白或重复时需要解决由于重复或遗漏造成的含糊不清或无效问题。
注: 在日历变更过程中 "丢失 "的天数(如从儒略历变更为公历)不会影响 QDateTime。虽然两种历法对日期的描述不同,但变化过程中的连续天数是由连续的QDate 实例来描述的,每个实例都比前一个实例晚一天,这由两种历法或它们的 toJulianDay() 值来描述。相反,跳过或重复一天的区段改变的是时间而不是日期,因为它改变了整整 24 小时。
UTC偏移
UTC偏移以格林威治以东的秒为单位。特定日期和时间所描述的时刻,如特定日期的正午,取决于所使用的时间表示法。对于任何给定的日期和时间组合,偏离UTC 越远的时间描述的时刻越早,偏离UTC 越近的时间描述的时刻越晚。
从UTC 出发的偏移量没有明确的大小限制,但在使用toString() 和fromString() 方法时有隐含限制,这两种方法使用±hh:mm 格式,有效地将范围限制为±99 小时 59 分钟和整分钟。请注意,目前没有任何时区的偏移量超出 ±14 小时的范围,所有已知的偏移量都是 5 分钟的倍数。历史时区的范围更广,可能会有包括秒在内的偏移量;这些偏移量无法用字符串忠实地表示。
另请参阅 QDate,QTime,QDateTimeEdit, 和QTimeZone 。
成员类型文档
[since 6.7]
enum class QDateTime::TransitionResolution
该枚举用于解决Timezone transitions 中的日期时间组合问题。
在以本地时间或夏令时时区为单位构建日期时间,或使用setDate(),setTime() 或setTimeZone() 修改日期时间时,给定的参数可能意味着在时区中没有意义或有两种意义的时间表示。这种时间表示法被描述为处于过渡阶段。无论是哪种情况,我们都可以简单地返回一个无效的日期时间,以表示操作定义不明确。在模棱两可的情况下,我们可以从两个时间中选择一个。在没有含义的情况下,我们可以选择其中一个可能有含义的时间。例如,当从一个较早的时间向前推进时,我们可以选择过渡后的时间,该时间实际上是相关较早时间之后的指定时间。这里指定的选项配置了如何进行这种选择。
常数 | 值 | 说明 |
---|---|---|
QDateTime::TransitionResolution::Reject | 0 | 将过渡时间中的任何时间视为无效时间。要么确实无效,要么模棱两可。 |
QDateTime::TransitionResolution::RelativeToBefore | 1 | 选择一个时间,就像从过渡前的时间向前迈进一样。这将使用过渡前的有效偏移来解释所请求的时间,并在必要时将结果转换为结果时间的有效偏移。 |
QDateTime::TransitionResolution::RelativeToAfter | 2 | 选择一个时间,就像从过渡后的时间向后退一样。这将使用过渡后的有效偏移来解释所请求的时间,并在必要时将结果转换为结果时间的有效偏移。 |
QDateTime::TransitionResolution::PreferBefore | 3 | 选择过渡前的时间、 |
QDateTime::TransitionResolution::PreferAfter | 4 | 选择转换后的时间。 |
QDateTime::TransitionResolution::PreferStandard | 5 | 选择转换后标准时间一侧的时间。 |
QDateTime::TransitionResolution::PreferDaylightSaving | 6 | 选择过渡时间中夏令时一侧的时间。 |
QDateTime::TransitionResolution::LegacyBehavior | RelativeToBefore | RelativeToBefore 的别名,默认用于 TransitionResolution 参数,因为它最接近 Qt 6.7 之前的行为。 |
对于addDays()、addMonths() 或addYears(),如果添加正调整,则使用RelativeToBefore
,如果添加负调整,则使用RelativeToAfter
。
注: 在夏令时增加UTC偏移的时区(称为 "正 DST"),PreferStandard 是 RelativeToAfter 的别名,PreferDaylightSaving 是 RelativeToBefore 的别名。在夏令时机制是在冬季减少与UTC的偏移量(称为 "负夏令时")的时区,只要操作系统报告日期时间是在夏令时还是标准时间(在大多数平台上都是如此),则反之亦然。在某些平台上,即使是Qt::TimeZone 日期时间也没有过渡时间,因此QTimeZone 不得不假定与UTC偏移较小的一方为标准时间,这实际上就是假定正 DST。
下表说明了QDateTime 构造函数如何在各种可能的情况下,在当地时间在 02:00 和 03:00 之间转换的情况下,以标称标准时间 LST 和夏令时 LDT 为两边,解决 02:30 的请求。过渡类型可以是跳一小时或重复一小时。过渡类型和参数值resolve
决定了所选日期的实际时间。首先是正夏令时的常见情况:
在 | 02:00-03:00 | 之后 | resolve | 选择 |
---|---|---|---|---|
LST | 跳过 | LDT | 相对于之前 | 03:30 LDT |
LST | 跳过 | LDT | 相对于之后 | 01:30 LST |
LST | 跳过 | LDT | 优先于 | 01:30 LST |
LST | 跳过 | LDT | 首选之后 | 03:30 LDT |
LST | 跳过 | LDT | 首选标准 | 01:30 LST |
LST | 跳过 | LDT | 首选夏令时 | 03:30 伦敦时间 |
平日 | 重复 | LST | 相对于之前 | 02:30 LDT |
LDT | 重复 | LST | 相对于之后 | 02:30 LST |
平日 | 重复 | LST | 首选时间 | 02:30 伦敦时间 |
最晚 | 重复 | LST | 首选之后 | 02:30 LST |
最晚 | 重复 | LST | 首选标准 | 02:30 LST |
本地时间 | 重复 | LST | 首选夏令时 | 02:30 LDT |
第二种是负夏令时,在冬季使用 LDT,在夏季跳过一小时过渡到 LST,然后在过渡回冬季时重复一小时:
夏令时 | 跳过 | 夏令时 | 相对于之前 | 03:30 LST |
无 | 跳过 | LST | 相对于之后 | 01:30 LDT |
平日 | 跳过 | LST | 优先于 | 01:30 LDT |
最晚 | 跳过 | LST | 首选之后 | 03:30 LST |
最晚 | 跳过 | LST | 首选标准 | 03:30 LST |
本地时间 | 跳过 | LST | 首选夏令时 | 01:30 LDT |
LST | 重复 | LDT | 相对于之前 | 02:30 LST |
LST | 重复 | LDT | 相对于之后 | 02:30 LDT |
LST | 重复 | LDT | 首选时间 | 02:30 LST |
LST | 重复 | LDT | 首选之后 | 02:30 LDT |
LST | 重复 | LDT | 首选标准 | 02:30 LST |
LST | 重复 | LDT | 首选夏令时 | 02:30 LDT |
Reject 可用于提示相关的QDateTime API 返回一个无效的日期时间对象,这样您的代码就可以自行处理转换问题,例如,提醒用户他们所选择的日期时间处于转换区间内,为他们提供解决冲突或歧义的机会。使用这种方法的代码可能会发现上述其他选项对确定相关信息非常有用,可用于自身(或用户)的解决。如果过渡的开始或结束,或过渡的时刻本身就是正确的解决方案,QTimeZone 的过渡 API 可以用来获取该信息。使用secsTo() 测量前一天和后一天正午之间的实际时间,可以确定过渡是重复间隔还是跳过间隔。如果是跳过的时间间隔(如向前跳转),结果将小于 48 小时;如果是重复的时间间隔(如向后跳转),结果将大于 48 小时。
注意: 如果指定了除 "拒绝 "以外的其他解决方法,则会尽可能返回一个有效的QDateTime 对象。如果所请求的日期-时间位于间隙中,返回的日期-时间将不具有所请求的time() --或者,在某些情况下,如果跳过了一整天,返回的日期-时间将不具有date() 。因此,您可以通过比较date() 和time() 与所请求的日期时间,来检测是否出现了间隙。
与其他日期时间软件的关系
Python 编程语言的日期时间 API 有一个与RelativeToBefore
(fold = True
) 和RelativeToAfter
(fold = False
) 相对应的fold
参数。
Temporal
提议取代 JavaScript 的Date
,为如何解决过渡问题提供了四个选项,作为disambiguation
参数的值。'reject'
会引发异常,大致相当于Reject
产生无效结果。其'earlier'
和'later'
选项对应PreferBefore
和PreferAfter
。其'compatible'
选项对应RelativeToBefore
(以及 Python 的fold = True
)。
该枚举在 Qt 6.7 中引入。
另请参阅 Timezone transitions 和 QDateTime::TransitionResolution。
enum class QDateTime::YearRange
该枚举类型描述了可由QDateTime 表示的年份范围(公历):
常数 | 值 | 描述 |
---|---|---|
QDateTime::YearRange::First | -292275056 | 可表示这一年的后期 |
QDateTime::YearRange::Last | +292278994 | 可表示这一年的前期 |
严格介于这两个年份之间的所有日期也可表示。但请注意,公历没有零年。
成员函数文档
QString QDateTime::toString(QStringView format, QCalendar cal) const
QString QDateTime::toString(const QString &format, QCalendar cal) const
以字符串形式返回日期时间。format 参数决定结果字符串的格式。如果提供cal ,它将决定用于表示日期的日历;默认为公历。在 Qt 5.14 之前,没有cal 参数,始终使用公历。关于format 参数中分别支持的时间和日期指定符,请参阅QTime::toString() 和QDate::toString() 。
任何用单引号括起来的字符序列都将逐字包含在输出字符串中(去掉引号),即使其中包含格式化字符。在输出中,两个连续的单引号("''")将被一个单引号取代。格式字符串中的所有其他字符将逐字包含在输出字符串中。
支持不带分隔符的格式(如 "ddMM"),但必须谨慎使用,因为生成的字符串并不总是可靠可读的(例如,如果 "dM "生成 "212",它可能表示 12 月 2 日或 2 月 21 日)。
格式字符串示例(假定QDateTime 为 2001 年 5 月 21 日 14:13:09.120):
格式 | 结果 |
---|---|
日.月.年.月 | 21.05.2001 |
ddd MMMM d yyy | 星期二 五月二十一日 01 |
hh:mm:ss.zzz | 14:13:09.120 |
hh:mm:ss.z | 14:13:09.12 |
h:m:s ap | 下午 2:13:9 |
如果日期时间无效,将返回空字符串。
注意: 日期和月份名称以及 AM/PM 指示符均以英语(C 语言区)显示。要获取本地化的月名和日名以及 AM/PM 的本地化形式,请使用QLocale::system().toDateTime() 。
另请参阅 fromString()、QDate::toString()、QTime::toString() 和QLocale::toString()。
[noexcept]
QDateTime::QDateTime()
构造一个空日期时间,名义上使用当地时间。
空日期时间是无效的,因为它的日期和时间都是无效的。
另请参阅 isValid(),setMSecsSinceEpoch(),setDate(),setTime() 和setTimeZone().
QDateTime::QDateTime(QDate date, QTime time, const QTimeZone &timeZone, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
使用给定的date 和time ,并使用timeZone 所描述的时间表示法,构造一个日期时间。
如果date 有效而time 无效,时间将被设置为午夜。如果timeZone 无效,日期时间也将无效。如果date 和time 所描述的时刻接近timeZone 的过渡时刻,则resolve 将控制如何解决这种情况。
注: 在 Qt 6.7 之前,此函数的版本缺少resolve 参数,因此无法解决与过渡相关的模糊问题。
[since 6.5]
QDateTime::QDateTime(QDate date, QTime time, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
这是一个重载函数。
根据给定的date 和time ,使用当地时间构造日期时间。
如果date 有效而time 无效,则使用午夜作为时间。如果date 和time 描述的时刻接近于当地时间的过渡时刻,resolve 将控制如何解决这种情况。
注: 在 Qt 6.7 之前,此函数的版本缺少resolve 参数,因此无法解决与转换相关的模糊问题。
此函数在 Qt 6.5 中引入。
[noexcept]
QDateTime::QDateTime(const QDateTime &other)
构建other datetime 的副本。
[noexcept]
QDateTime::QDateTime(QDateTime &&other)
将临时other datetime 的内容移至此对象,并将other 保留在未指定的(但适当的)状态。
[noexcept]
QDateTime::~QDateTime()
销毁日期时间。
QDateTime QDateTime::addDays(qint64 ndays) const
返回一个QDateTime 对象,其中包含一个日期时间ndays ,比该对象的日期时间晚几天(如果ndays 为负数,则早几天)。
如果timeSpec() 为Qt::LocalTime 或Qt::TimeZone ,且所得到的日期和时间位于标准时间向夏令时过渡的时间段内,那么结果将正好在这一间隙之外,与变化方向一致。如果过渡时间是凌晨 2 点,而时钟前进到凌晨 3 点,则瞄准凌晨 2 点和 3 点之间的结果将调整为落在凌晨 2 点之前(如果是ndays < 0
)或凌晨 3 点之后(否则)。
另请参阅 daysTo(),addMonths(),addYears(),addSecs() 和Timezone transitions 。
[since 6.4]
QDateTime QDateTime::addDuration(std::chrono::milliseconds msecs) const
返回一个QDateTime 对象,其中包含一个日期时间msecs 毫秒,该日期时间晚于此对象的日期时间(如果msecs 为负数,则早于此日期时间)。
如果该日期时间无效,将返回一个无效的日期时间。
注意: 添加以std::chrono::months
或std::chrono::years
表示的持续时间与使用addMonths() 或addYears() 得到的结果不同。前者是根据太阳年计算的固定持续时间;后者使用公历的月/年定义。
该函数在 Qt 6.4 中引入。
另请参阅 addMSecs()、msecsTo()、addDays()、addMonths() 和addYears()。
QDateTime QDateTime::addMSecs(qint64 msecs) const
返回一个QDateTime 对象,其中包含一个日期时间msecs 毫秒,该日期时间晚于此对象的日期时间(如果msecs 为负数,则早于此日期时间)。
如果该日期时间无效,将返回一个无效的日期时间。
另请参见 addSecs()、msecsTo()、addDays()、addMonths() 和addYears()。
QDateTime QDateTime::addMonths(int nmonths) const
返回一个QDateTime 对象,其中包含一个比该对象的日期时间nmonths 晚几个月的日期时间(如果nmonths 为负数,则会早几个月)。
如果timeSpec() 为Qt::LocalTime 或Qt::TimeZone ,且所得到的日期和时间位于标准时间向夏令时过渡的时间段内,那么结果将正好在这一间隙之外,与变化方向一致。如果过渡时间是凌晨 2 点,而时钟前进到凌晨 3 点,则瞄准凌晨 2 点和 3 点之间的结果将调整为落在凌晨 2 点之前(如果是nmonths < 0
)或凌晨 3 点之后(否则)。
另请参阅 daysTo(),addDays(),addYears(),addSecs() 和Timezone transitions 。
QDateTime QDateTime::addSecs(qint64 s) const
返回一个QDateTime 对象,其中包含一个比该对象的日期时间晚s 秒的日期时间(如果s 为负数,则比该日期时间早)。
如果该日期时间无效,将返回一个无效的日期时间。
另请参阅 addMSecs()、secsTo()、addDays()、addMonths() 和addYears()。
QDateTime QDateTime::addYears(int nyears) const
返回一个QDateTime 对象,其中包含一个比该对象的日期时间nyears 晚几年的日期时间(如果nyears 为负数,则会早几年)。
如果timeSpec() 为Qt::LocalTime 或Qt::TimeZone ,且所得到的日期和时间位于标准时间向夏令时的转换时间段内,那么结果将正好在这一间隙之外,与变化方向一致。如果过渡时间是凌晨 2 点,而时钟前进到凌晨 3 点,则瞄准凌晨 2 点和 3 点之间的结果将调整为落在凌晨 2 点之前(如果是nyears < 0
)或凌晨 3 点之后(否则)。
另请参阅 daysTo(),addDays(),addMonths(),addSecs() 和Timezone transitions 。
[static, since 6.5]
QDateTime QDateTime::currentDateTime(const QTimeZone &zone)
使用zone 所描述的时间表示法,返回系统时钟的当前日期时间。如果省略zone ,则使用本地时间。
此函数在 Qt 6.5 中引入。
另请参阅 currentDateTimeUtc()、QDate::currentDate()、QTime::currentTime() 和toTimeZone()。
[static]
QDateTime QDateTime::currentDateTime()
这是一个重载函数。
[static]
QDateTime QDateTime::currentDateTimeUtc()
返回以 UTC 表示的系统时钟当前日期时间。
等同于currentDateTime(QTimeZone::UTC)
。
另请参阅 currentDateTime()、QDate::currentDate()、QTime::currentTime() 和toTimeZone()。
[static noexcept]
qint64 QDateTime::currentMSecsSinceEpoch()
返回自 1970 年(世界协调时)开始以来的当前毫秒数。
这个数字类似于 POSIX time_t 变量,但单位是毫秒而不是秒。
另请参阅 currentDateTime()、currentDateTimeUtc() 和toTimeZone()。
[static noexcept]
qint64 QDateTime::currentSecsSinceEpoch()
返回自 1970 年(世界协调时)开始后的秒数。
该数字类似于 POSIX time_t 变量。
另请参阅 currentMSecsSinceEpoch().
QDate QDateTime::date() const
返回日期时间的日期部分。
另请参阅 setDate()、time() 和timeRepresentation()。
qint64 QDateTime::daysTo(const QDateTime &other) const
返回从此日期时间到other 日期时间的天数。天数按此日期时间到other 日期时间之间到达午夜的次数计算。也就是说,从 23:55 到次日 0:05 相差 10 分钟,也算一天。
如果other 日期早于此日期,则返回值为负数。
示例
QDateTimestartDate(QDate(2012, 7, 6), QTime(8, 30, 0));QDateTimeendDate(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); // Make endDate before startDate. qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);
另请参见 addDays()、secsTo() 和msecsTo()。
[static]
QDateTime QDateTime::fromCFDate(CFDateRef date)
构造一个新的QDateTime ,其中包含 CFDatedate 的副本。
另请参阅 toCFDate() 。
[static]
QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
返回一个日期时间,它代表 1970 年(UTC 时)开始后的某一时刻,其给定的毫秒数为msecs ,具体描述见timeZone 。默认时间表示为当地时间。
请注意,msecs 的值可能超出QDateTime 的有效范围,包括负值和正值。对于这些值,本函数的行为未定义。
另请参阅 fromSecsSinceEpoch()、toMSecsSinceEpoch() 和setMSecsSinceEpoch()。
[static]
QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs)
这是一个重载函数。
[static]
QDateTime QDateTime::fromNSDate(const NSDate *date)
构造一个新的QDateTime ,其中包含 NSDatedate 的副本。
另请参阅 toNSDate() 。
[static]
QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone)
返回一个日期时间,代表 1970 年(UTC)开始后给定秒数secs 的时刻,该时刻由timeZone 指定。默认时间表示为当地时间。
请注意,secs 有可能超出QDateTime 的有效范围,包括负值和正值。对于这些值,本函数的行为未定义。
另请参阅 fromMSecsSinceEpoch()、toSecsSinceEpoch() 和setSecsSinceEpoch()。
[static]
QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs)
这是一个重载函数。
[static, since 6.4]
QDateTime QDateTime::fromStdLocalTime(const std::chrono::local_time<std::chrono::milliseconds> &time)
构造一个日期和时间均为time 所代表的毫秒数的 datetime,该毫秒数自 1970-01-01T00:00:00.000 当地时间起计算 (Qt::LocalTime)。
注意: 此函数需要 C++20 支持。
此函数在 Qt 6.4 中引入。
另请参阅 toStdSysMilliseconds() 和fromMSecsSinceEpoch() 。
[static, since 6.4]
QDateTime QDateTime::fromStdTimePoint(const std::chrono::local_time<std::chrono::milliseconds> &time)
构造一个日期和时间均为time 所代表的毫秒数的 datetime,该毫秒数自 1970-01-01T00:00:00.000 当地时间起计算 (Qt::LocalTime)。
注意: 此函数需要 C++20 支持。
此函数在 Qt 6.4 中引入。
另请参阅 toStdSysMilliseconds() 和fromMSecsSinceEpoch()。
[static, since 6.4]
template <typename Clock, typename Duration> QDateTime QDateTime::fromStdTimePoint(const std::chrono::time_point<Clock, Duration> &time)
使用Qt::UTC 作为时间表示,构造一个与time 表示相同时间点的日期时间。
time 的时钟必须与std::chrono::system_clock
兼容;特别是,必须存在std::chrono::clock_cast
支持的转换。转换后,结果的持续时间类型必须可转换为std::chrono::milliseconds
。
如果不是这种情况,调用者必须对std::chrono::system_clock
进行必要的时钟转换,并对持续时间类型(cast/round/floor/ceil/......)进行必要的转换,以便该函数的输入满足上述限制条件。
注: 此函数需要 C++20。
此函数在 Qt 6.4 中引入。
另请参阅 toStdSysMilliseconds() 和fromMSecsSinceEpoch()。
[static, since 6.4]
QDateTime QDateTime::fromStdTimePoint(std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> time)
这是一个重载函数。
使用Qt::UTC 作为时间表示,构造一个与time 表示相同时间点的 datetime。
该函数在 Qt 6.4 中引入。
[static, since 6.4]
QDateTime QDateTime::fromStdZonedTime(const int &time)
构造一个日期时间,代表与time 相同的时间点。结果将以time 的时区表示。
注意: 此函数需要 C++20 支持。
此函数在 Qt 6.4 中引入。
另请参阅 QTimeZone,toStdSysMilliseconds() 和fromMSecsSinceEpoch() 。
[static]
QDateTime QDateTime::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
使用给定的format 返回string 所代表的QDateTime ,如果无法返回,则返回无效的日期时间。
Qt::TextDate 的注意事项:只识别英文短月名(如短月名 "Jan "或长月名 "January")。
另请参见 toString() 和QLocale::toDateTime()。
[static]
QDateTime QDateTime::fromString(const QString &string, const QString &format, int baseYear, QCalendar cal)
使用给出的format 返回string 所代表的QDateTime ,如果字符串无法解析,则返回无效的日期时间。
如果提供了日历cal ,则使用公历,否则使用格里高利历。
如果format 只指定了年份的最后两位数字,则首先考虑从baseYear 开始的 100 年。在 6.7 之前,没有baseYear 参数,总是使用 1900。这是baseYear 的默认设置,选择从 1900 年到 1999 年的年份。在某些情况下,其他字段可能会导致选择下一世纪或上一世纪,以获得与所有给定字段一致的结果。详见QDate::fromString() 。
除了通过QDate::fromString() 和QTime::fromString() 在格式字符串中识别表达式以表示部分日期和时间外,本方法还支持以下表达式:
表达式 | 输出 |
---|---|
t | 时区(偏移量、名称、"Z "或带 "UTC "前缀的偏移量) |
tt | 偏移格式的时区,小时和分钟之间不加冒号(例如 "+0200) |
ttt | 时区偏移格式,小时和分钟之间用冒号隔开(例如 "+02:00) |
tttt | 时区名称,可以是QTimeZone::displayName() 为QTimeZone::LongName 报告的名称,也可以是时区的 IANA ID(例如 "Europe/Berlin")。所识别的名称是QTimeZone 已知的名称,可能取决于所使用的操作系统。 |
如果没有 "t "格式指定符,则使用系统的本地时区。有关所有其他字段的默认值,请参阅QDate::fromString() 和QTime::fromString()。
例如
QDateTime dateTime = QDateTime::fromString("1.30.1", "M.d.s"); // dateTime is January 30 in 1900 at 00:00:01. dateTime = QDateTime::fromString("12", "yy"); // dateTime is January 1 in 1912 at 00:00:00.
所有其他输入字符将被视为文本。任何用单引号括起来的非空字符序列也将被视为文本(去掉引号),而不会被解释为表达式。
QTime time1 = QTime::fromString("131", "HHh"); // time1 is 13:00:00 QTime time1 = QTime::fromString("1apA", "1amAM"); // time1 is 01:00:00 QDateTime dateTime2 = QDateTime::fromString("M1d1y9800:01:02", "'M'M'd'd'y'yyhh:mm:ss"); // dateTime is 1 January 1998 00:01:02
如果格式不符合要求,将返回无效的QDateTime 。如果格式符合要求,但string 代表一个无效的日期时间(例如,在时区转换跳过的间隙中),则会返回一个有效的QDateTime ,它代表一个附近的有效日期时间。
没有前导零的表达式(d、M、h、m、s、z)将是贪心的。这意味着它们将使用两位数(或三位数,对于 z),即使这会使它们超出范围和/或给其他部分留下的位数太少。
这可能意味着 1 January 00:30.00,但 M 会抓取两位数。
string 中指定不正确的字段将导致返回无效的QDateTime 。仅支持本地时间 100 年初至 9999 年末之间的日期时间。请注意,在其他时区,特别是包括 UTC 在内的时区,靠近此范围两端的日期时间可能会超出此范围(并因此被视为无效),具体取决于当地时区。
注意: 日期和月份名称以及 AM/PM 指示符必须使用英语(C 语言区)。如果要识别本地化的月名和日名或 AM/PM 的本地化形式,请使用QLocale::system().toDateTime().
注意: 如果格式字符的重复次数超过了上表中使用该字符的最长表达式,则格式的这一部分将被读作多个表达式,它们之间没有分隔符;最长的表达式可能会重复多次,以一个可能是较短表达式的残差结束。因此,'tttttt'
将匹配"Europe/BerlinEurope/Berlin"
并将区域设置为柏林时间;如果日期时间字符串包含 "Europe/BerlinZ",它将 "匹配",但产生的结果不一致,导致日期时间无效。
另请参见 toString()、QDate::fromString()、QTime::fromString() 和QLocale::toDateTime()。
[static, since 6.0]
QDateTime QDateTime::fromString(QStringView string, Qt::DateFormat format = Qt::TextDate)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
[static, since 6.0]
QDateTime QDateTime::fromString(QStringView string, QStringView format, QCalendar cal)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
[static, since 6.7]
QDateTime QDateTime::fromString(QStringView string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
这是一个重载函数。
使用默认构造的QCalendar 。
此函数在 Qt 6.7 中引入。
[static, since 6.0]
QDateTime QDateTime::fromString(const QString &string, QStringView format, QCalendar cal)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
[static, since 6.7]
QDateTime QDateTime::fromString(const QString &string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
这是一个重载函数。
使用默认构造的QCalendar 。
此函数在 Qt 6.7 中引入。
[static]
QDateTime QDateTime::fromString(const QString &string, const QString &format, QCalendar cal)
这是一个重载函数。
[static, since 6.7]
QDateTime QDateTime::fromString(const QString &string, const QString &format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
这是一个重载函数。
使用默认构造的QCalendar 。
此函数在 Qt 6.7 中引入。
[static, since 6.7]
QDateTime QDateTime::fromString(QStringView string, QStringView format, int baseYear, QCalendar cal)
这是一个重载函数。
该函数在 Qt 6.7 中引入。
[static, since 6.0]
QDateTime QDateTime::fromString(const QString &string, QStringView format, int baseYear, QCalendar cal)
这是一个重载函数。
该函数在 Qt 6.0 中引入。
bool QDateTime::isDaylightTime() const
返回该日期时间是否属于夏令时。
如果Qt::TimeSpec 不是Qt::LocalTime 或Qt::TimeZone ,则总是返回 false。
另请参阅 timeSpec().
bool QDateTime::isNull() const
如果日期和时间均为空,则返回true
;否则返回false
。空日期时间无效。
另请参阅 QDate::isNull()、QTime::isNull() 和isValid()。
bool QDateTime::isValid() const
如果该日期时间代表一个确定的时刻,则返回true
,否则返回false
。
如果日期和时间都是有效的,并且所使用的时间表示法对它们的组合赋予了有效的含义,那么日期时间就是有效的。当时间表示的是特定时区或当地时间时,在某些日期中,时区表示可能会跳过一些时间,如夏令时转换跳过一小时(通常是在春季的夜晚)。例如,如果夏令时在凌晨 2 点结束,时钟前进到凌晨 3 点,则当天 02:00:00 至 02:59:59.999 的日期时间无效。
另请参阅 QDateTime::YearRange,QDate::isValid() 和QTime::isValid()。
qint64 QDateTime::msecsTo(const QDateTime &other) const
返回从此日期时间到other 日期时间之间的毫秒数。如果other 日期时间早于此日期时间,则返回值为负数。
在进行比较之前,会将两个日期时间转换为Qt::UTC ,以确保在夏令时 (DST) 适用于其中一个日期时间而不适用于另一个日期时间的情况下,结果是正确的。
如果其中一个日期时间无效,则返回 0。
另请参阅 addMSecs()、daysTo() 和QTime::msecsTo()。
int QDateTime::offsetFromUtc() const
以秒为单位返回该日期时间的UTC 偏移量。
结果取决于timeSpec():
Qt::UTC
偏移值为 0。Qt::OffsetFromUTC
偏移量是最初设置的值。Qt::LocalTime
返回本地时间与 UTC 的偏移量。Qt::TimeZone
返回时区使用的偏移量。
对于后两项,将返回该日期和时间的偏移量,同时考虑夏令时偏移量。偏移量是给定时区的当地时间或时间与 UTC 时间之间的差值;在 UTC 之前(本初子午线以东)的时区为正值,在 UTC 之后(本初子午线以西)的时区为负值。
另请参见 setOffsetFromUtc().
qint64 QDateTime::secsTo(const QDateTime &other) const
返回从此日期时间到other 日期时间的秒数。如果other 日期时间早于此日期时间,则返回值为负数。
在进行比较之前,会将两个日期时间转换为Qt::UTC ,以确保在夏令时 (DST) 适用于其中一个日期时间而不适用于另一个日期时间的情况下,结果是正确的。
如果其中一个日期时间无效,则返回 0。
示例
QDateTimenow=QDateTime::currentDateTime();QDateTimexmas(QDate(now.date().year(), 12, 25).startOfDay());qDebug("There are %d seconds to Christmas", now.secsTo(xmas));
另请参见 addSecs()、daysTo() 和QTime::secsTo()。
void QDateTime::setDate(QDate date, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
将此日期时间的日期部分设置为date 。
如果尚未设置时间,则设置为午夜。如果date 无效,则QDateTime 也无效。
如果date 和time() 描述了该日期时间的时间表示接近过渡的时刻,resolve 将控制如何解决这种情况。
注: 在 Qt 6.7 之前,该函数的版本缺少resolve 参数,因此无法解决与过渡相关的模糊问题。
另请参阅 date()、setTime() 和setTimeZone()。
void QDateTime::setMSecsSinceEpoch(qint64 msecs)
将日期时间设置为 1970 年(世界协调时)开始后的给定毫秒数(msecs )。
在不支持时区的系统上,该函数的行为将与当地时间Qt::UTC 相同。
请注意,将qint64
(std::numeric_limits<qint64>::min()
) 的最小值传入msecs 将导致未定义的行为。
另请参阅 setSecsSinceEpoch()、toMSecsSinceEpoch() 和fromMSecsSinceEpoch()。
void QDateTime::setSecsSinceEpoch(qint64 secs)
将日期时间设置为 1970 年(世界协调时)开始后给定秒数(secs )的时刻。
在不支持时区的系统上,该函数的行为将与当地时间Qt::UTC 相同。
另请参阅 setMSecsSinceEpoch()、toSecsSinceEpoch() 和fromSecsSinceEpoch()。
void QDateTime::setTime(QTime time, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
将此日期时间的时间部分设置为time 。如果time 无效,则此函数将其设置为午夜。因此,可以通过将QDateTime 设置为默认的QTime 来清除 中的任何设定时间:
如果date() 和time 描述了一个接近于该日期时间的时间表示过渡的时刻,resolve 将控制如何解决这种情况。
注: 在 Qt XML 6.7 之前,该函数的版本缺少resolve 参数,因此无法解决与过渡相关的模糊问题。
另请参阅 time()、setDate() 和setTimeZone()。
void QDateTime::setTimeZone(const QTimeZone &toZone, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
将此日期时间使用的时区设置为toZone 。
该日期时间可能指不同的时间点。它使用toZone 的时间表示法,这可能会改变其不变的date() 和time() 的含义。
如果toZone 无效,则该日期时间也将无效。否则,调用后该日期时间的timeSpec() 将与toZone.timeSpec()
匹配。
如果date() 和time() 描述的时刻接近toZone 的过渡时刻,resolve 将控制如何解决这种情况。
注: 在 Qt 6.7 之前,此函数的版本缺少resolve 参数,因此无法解决与过渡相关的歧义。
另请参阅 timeRepresentation(),timeZone() 和Qt::TimeSpec 。
[noexcept]
void QDateTime::swap(QDateTime &other)
将此日期时间与other 互换。该操作速度非常快,从未出现过故障。
QTime QDateTime::time() const
返回日期时间的时间部分。
另请参阅 setTime()、date() 和timeRepresentation()。
[since 6.5]
QTimeZone QDateTime::timeRepresentation() const
返回一个QTimeZone ,指明该日期时间如何表示时间。
返回的QTimeZone 的timeSpec() 将与该日期时间的 () 一致;如果不是Qt::TimeZone ,则返回的QTimeZone 是时间表示法。当timeSpec() 为Qt::OffsetFromUTC 时,返回的QTimeZone 的 fixedSecondsAheadOfUtc() 将提供偏移量。当timeSpec() 为Qt::TimeZone 时,QTimeZone 对象本身就是该时区的完整表示。
此函数在 Qt 6.5 中引入。
另请参阅 timeZone()、setTimeZone() 和QTimeZone::asBackendZone()。
Qt::TimeSpec QDateTime::timeSpec() const
返回日期时间的时间规格。
它将时间表示法分为当地时间、UTC、UTC 固定偏移量(不指明偏移量)或时区(不提供时区详情)。等同于timeRepresentation().timeSpec()
。
另请参阅 setTimeZone()、timeRepresentation()、date() 和time() 。
QTimeZone QDateTime::timeZone() const
返回日期时间的时区。
结果与timeRepresentation().asBackendZone()
相同。在所有情况下,结果的timeSpec() 都是Qt::TimeZone 。
当timeSpec() 为Qt::LocalTime 时,结果将描述调用此方法时的当地时间。它不会反映系统时区的后续变化,即使获取结果的QDateTime 也是如此。
另请参阅 timeRepresentation()、setTimeZone()、Qt::TimeSpec 和QTimeZone::asBackendZone()。
QString QDateTime::timeZoneAbbreviation() const
返回此日期时间的时区缩写。
返回的字符串取决于timeSpec():
- 对于Qt::UTC ,它是 "UTC"。
- 对于Qt::OffsetFromUTC ,格式为 "UTC±00:00"。
- 对于Qt::LocalTime ,将查询主机系统。
- 对于Qt::TimeZone ,将查询相关的QTimeZone 对象。
注意: 缩写不保证唯一,即不同时区可能有相同的缩写。对于Qt::LocalTime 和Qt::TimeZone ,主机系统返回的缩写可能是本地化的。
另请参阅 timeSpec() 和QTimeZone::abbreviation()。
CFDateRef QDateTime::toCFDate() const
从QDateTime 创建 CFDate。
调用者拥有 CFDate 对象并负责释放它。
另请参阅 fromCFDate() 。
QDateTime QDateTime::toLocalTime() const
返回该日期时间转换为当地时间的副本。
结果代表与此日期时间相同的时间点,并与此日期时间相等。
示例
QDateTimeUTC(QDateTime::currentDateTimeUtc());QDateTimelocal(UTC.toLocalTime());qDebug() << "UTC time is:" << UTC; qDebug() << "Local time is:" << local; qDebug() << "No difference between times:" << UTC.secsTo(local);
另请参见 toTimeZone()、toUTC() 和toOffsetFromUtc()。
qint64 QDateTime::toMSecsSinceEpoch() const
以 1970 年(世界协调时)开始后的毫秒数返回日期时间。
在不支持时区的系统中,该函数的行为将与本地时间Qt::UTC 相同。
如果存储在此对象中的日期时间无效,则此函数的行为未定义。不过,对于所有有效日期,该函数都会返回一个唯一值。
另请参阅 toSecsSinceEpoch()、setMSecsSinceEpoch() 和fromMSecsSinceEpoch()。
NSDate *QDateTime::toNSDate() const
从QDateTime 创建 NSDate。
NSDate 对象将自动释放。
另请参阅 fromNSDate().
QDateTime QDateTime::toOffsetFromUtc(int offsetSeconds) const
返回将此日期时间转换为Qt::OffsetFromUTC 的规格的副本,其中包含给定的offsetSeconds 。等同于toTimeZone(QTimeZone::fromSecondsAheadOfUtc(offsetSeconds))
。
如果offsetSeconds 等于 0,则返回 UTC 日期时间。
结果与此日期时间代表同一时刻,并与之相等。
另请参阅 setOffsetFromUtc()、offsetFromUtc() 和toTimeZone()。
qint64 QDateTime::toSecsSinceEpoch() const
以 1970 年(世界协调时)开始后的秒数返回日期时间。
在不支持时区的系统中,该函数的行为将与本地时间Qt::UTC 相同。
如果存储在此对象中的日期时间无效,则此函数的行为未定义。不过,对于所有有效日期,该函数都会返回一个唯一值。
另请参阅 toMSecsSinceEpoch()、fromSecsSinceEpoch() 和setSecsSinceEpoch()。
[since 6.4]
std::chrono::sys_time<std::chrono::milliseconds> QDateTime::toStdSysMilliseconds() const
使用std::chrono::system_clock
作为时钟,将此日期时间对象转换为以毫秒表示的等效时间点。
注: 此函数需要 C++20。
此函数在 Qt 6.4 中引入。
另请参阅 fromStdTimePoint() 和toMSecsSinceEpoch()。
[since 6.4]
std::chrono::sys_seconds QDateTime::toStdSysSeconds() const
使用std::chrono::system_clock
作为时钟,将此日期时间对象转换为以秒表示的等效时间点。
注意: 此函数需要 C++20。
此函数在 Qt 6.4 中引入。
另请参阅 fromStdTimePoint() 和toSecsSinceEpoch()。
QString QDateTime::toString(QStringView format) const
这是一个重载函数。
QString QDateTime::toString(Qt::DateFormat format = Qt::TextDate) const
这是一个重载函数。
以字符串形式返回日期时间,格式为format 。
如果format 是Qt::TextDate ,字符串将按默认方式格式化。日期和月份名称将使用英文。格式化示例为 "Wed May 20 03:40:13 1998"。有关本地化格式,请参阅QLocale::toString() 。
如果format 是Qt::ISODate ,字符串格式与 ISO 8601 中日期和时间表示法的扩展规范一致,格式为 yyyy-MM-ddTHH:mm:ss[Z|±HH:mm],具体取决于QDateTime 的timeSpec() 。如果timeSpec() 是Qt::UTC ,字符串中将附加 Z;如果timeSpec() 是Qt::OffsetFromUTC ,字符串中将附加从 UTC 开始的小时和分钟偏移量。要在 ISO 8601 日期中包含毫秒,请使用format Qt::ISODateWithMs ,它对应于 yyyy-MM-ddTHH:mm:ss.zzz[Z|±HH:mm] 。
如果format 是Qt::RFC2822Date ,字符串格式将遵循RFC 2822。
如果日期时间无效,将返回空字符串。
警告: Qt::ISODate 格式仅对 0 至 9999 范围内的年份有效。
另请参阅 fromString()、QDate::toString()、QTime::toString() 和QLocale::toString()。
QString QDateTime::toString(const QString &format) const
这是一个重载函数。
QDateTime QDateTime::toTimeZone(const QTimeZone &timeZone) const
返回将此日期时间转换为给定timeZone 的副本。
结果代表与此日期时间相同的时间点,并等于此日期时间。
结果用timeZone 的时间表示法描述时间时刻。例如
QDateTimelocal(QDateTime::currentDateTime());QDateTimeUTC(local.toTimeZone(QTimeZone::UTC));qDebug() << "Local time is:" << local; qDebug() << "UTC time is:" << UTC; qDebug() << "No difference between times represented:" << local.secsTo(UTC);
如果timeZone 无效,日期时间也将无效。否则,返回的日期时间timeSpec() 将与timeZone.timeSpec()
匹配。
另请参阅 timeRepresentation()、toLocalTime()、toUTC() 和toOffsetFromUtc()。
QDateTime QDateTime::toUTC() const
返回该日期时间转换为 UTC 的副本。
结果代表与此日期时间相同的时间点,并与之相等。
示例
QDateTimelocal(QDateTime::currentDateTime());QDateTimeUTC(local.toUTC());qDebug() << "Local time is:" << local; qDebug() << "UTC time is:" << UTC; qDebug() << "No difference between times:" << local.secsTo(UTC);
另请参见 toTimeZone()、toLocalTime() 和toOffsetFromUtc()。
[since 6.4]
QDateTime &QDateTime::operator+=(std::chrono::milliseconds duration)
通过添加给定的duration 来修改此日期时间对象。如果duration 为正值,则更新后的对象将更晚,如果为负值,则更新后的对象将更早。
如果此日期时间无效,此函数将不起作用。
返回此日期时间对象的引用。
此函数在 Qt 6.4 中引入。
另请参阅 addMSecs().
[since 6.4]
QDateTime &QDateTime::operator-=(std::chrono::milliseconds duration)
通过减去给定的duration 来修改此日期时间对象。如果duration 为正值,则更新后的对象将提前;如果为负值,则更新后的对象将推迟。
如果此日期时间无效,此函数将不起作用。
返回该日期时间对象的引用。
此函数在 Qt 6.4 中引入。
另请参阅 addMSecs 。
[noexcept]
QDateTime &QDateTime::operator=(const QDateTime &other)
将other datetime 复制到 this 中并返回该副本。
相关非会员
[since 6.4]
QDateTime operator+(const QDateTime &dateTime, std::chrono::milliseconds duration)
[since 6.4]
QDateTime operator+(std::chrono::milliseconds duration, const QDateTime &dateTime)
返回一个QDateTime 对象,其中包含一个日期时间duration 毫秒,晚于dateTime (如果duration 为负数,则早于 )。
如果dateTime 无效,将返回一个无效的日期时间。
此函数在 Qt 6.4 中引入。
另请参阅 addMSecs().
[noexcept]
bool operator!=(const QDateTime &lhs, const QDateTime &rhs)
如果lhs 与rhs 不同,则返回true
;否则返回false
。
使用不同时间表示法的两个日期时间可能与 UTC 有不同的偏移量。在这种情况下,即使它们的date() 和time() 不同,如果它们的偏移量与 UTC 的偏移量相匹配,它们也可以进行等价比较。如果它们的date()
和time()
相吻合,则与 UTC 偏移量较大的日期时间比偏移量较小的日期时间短(早)。因此,日期时间只有弱排序。
自 5.14 起,所有无效日期时间都等价且小于所有有效日期时间。
另请参阅 operator==()。
[since 6.4]
std::chrono::milliseconds operator-(const QDateTime &lhs, const QDateTime &rhs)
返回lhs 和rhs 之间的毫秒数。如果lhs 早于rhs ,结果将为负数。
如果其中一个日期时间无效,则返回 0。
此函数在 Qt 6.4 中引入。
另请参阅 msecsTo().
[since 6.4]
QDateTime operator-(const QDateTime &dateTime, std::chrono::milliseconds duration)
返回一个QDateTime 对象,其中包含一个日期时间duration 毫秒,早于dateTime (如果duration 为负数,则晚于 )。
如果dateTime 无效,将返回一个无效的日期时间。
此函数在 Qt 6.4 中引入。
另请参阅 addMSecs().
[noexcept]
bool operator<(const QDateTime &lhs, const QDateTime &rhs)
如果lhs 早于rhs ,则返回true
;否则返回false
。
使用不同时间表示法的两个日期时间可能与 UTC 有不同的偏移量。在这种情况下,即使它们的date() 和time() 不同,如果其差异与 UTC 偏移量的差异相匹配,它们也可以进行等价比较。如果它们的date()
和time()
相吻合,则与 UTC 偏移量较大的日期时间比偏移量较小的日期时间短(早)。因此,日期时间只有弱排序。
自 5.14 起,所有无效日期时间都等价且小于所有有效日期时间。
另请参阅 operator==()。
QDataStream &operator<<(QDataStream &out, const QDateTime &dateTime)
将dateTime 写入out 流。
另请参阅 序列化 Qt 数据类型。
[noexcept]
bool operator<=(const QDateTime &lhs, const QDateTime &rhs)
如果lhs 早于或等于rhs ,则返回true
;否则返回false
。
使用不同时间表示法的两个日期时间可能与 UTC 有不同的偏移量。在这种情况下,即使它们的date() 和time() 不同,如果它们的偏移量与 UTC 的偏移量相匹配,它们也可以进行等价比较。如果它们的date()
和time()
相吻合,则与 UTC 偏移量较大的日期时间比偏移量较小的日期时间短(早)。因此,日期时间只有弱排序。
自 5.14 起,所有无效日期时间都等价且小于所有有效日期时间。
另请参阅 operator==()。
[noexcept]
bool operator==(const QDateTime &lhs, const QDateTime &rhs)
如果lhs 表示的时间与rhs 表示的时间相同,则返回true
;否则返回false
。
使用不同时间表示法的两个日期时间可能与 UTC 有不同的偏移量。在这种情况下,即使它们的date() 和time() 不同,如果其差异与 UTC 偏移量的差异相匹配,它们也可以进行等价比较。如果它们的date()
和time()
相吻合,则与 UTC 偏移量较大的日期时间比偏移量较小的日期时间短(早)。因此,日期时间只有弱排序。
自 5.14 起,所有无效日期时间都等价且小于所有有效日期时间。
另请参见 operator!=()、operator<()、operator<=()、operator>() 和operator>=()。
[noexcept]
bool operator>(const QDateTime &lhs, const QDateTime &rhs)
如果lhs 晚于rhs ,则返回true
;否则返回false
。
使用不同时间表示法的两个日期时间可能与 UTC 有不同的偏移量。在这种情况下,即使它们的date() 和time() 不同,如果它们的偏移量与 UTC 的偏移量相匹配,它们也可以进行等价比较。如果它们的date()
和time()
相吻合,则与 UTC 偏移量较大的日期时间比偏移量较小的日期时间短(早)。因此,日期时间只有弱排序。
自 5.14 起,所有无效日期时间都等价且小于所有有效日期时间。
另请参阅 operator==()。
[noexcept]
bool operator>=(const QDateTime &lhs, const QDateTime &rhs)
如果lhs 晚于或等于rhs ,则返回true
;否则返回false
。
使用不同时间表示法的两个日期时间可能与 UTC 有不同的偏移量。在这种情况下,即使它们的date() 和time() 不同,如果它们的差异与 UTC 偏移量的差异相匹配,它们也可以进行等价比较。如果它们的date()
和time()
相吻合,则与 UTC 偏移量较大的日期时间比偏移量较小的日期时间短(早)。因此,日期时间只有弱排序。
自 5.14 起,所有无效日期时间都等价且小于所有有效日期时间。
另请参阅 operator==()。
QDataStream &operator>>(QDataStream &in, QDateTime &dateTime)
将日期时间从in 流读入dateTime 。
另请参阅 序列化 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.