QDateTime 类

The QDateTime class provides date and time functions. More...

头文件 #include <QDateTime>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

此类是 弱比较

注意: 此类中所有函数都是 可重入的

公共类型

(since 6.7)枚举类TransitionResolution { Reject, RelativeToBefore, RelativeToAfter, PreferBefore, PreferAfter, …, LegacyBehavior }
枚举类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()
QDateTimeaddDays(qint64 ndays) const
(since 6.4) QDateTimeaddDuration(std::chrono::milliseconds msecs) const
QDateTimeaddMSecs(qint64 msecs) const
QDateTimeaddMonths(int nmonths) const
QDateTimeaddSecs(qint64 s) const
QDateTimeaddYears(int nyears) const
QDatedate() const
qint64daysTo(const QDateTime &other) const
boolisDaylightTime() const
boolisNull() const
boolisValid() const
qint64msecsTo(const QDateTime &other) const
intoffsetFromUtc() const
qint64secsTo(const QDateTime &other) const
voidsetDate(QDate date, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
voidsetMSecsSinceEpoch(qint64 msecs)
voidsetSecsSinceEpoch(qint64 secs)
voidsetTime(QTime time, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
voidsetTimeZone(const QTimeZone &toZone, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
voidswap(QDateTime &other)
QTimetime() const
(since 6.5) QTimeZonetimeRepresentation() const
Qt::TimeSpectimeSpec() const
QTimeZonetimeZone() const
QStringtimeZoneAbbreviation() const
CFDateReftoCFDate() const
QDateTimetoLocalTime() const
qint64toMSecsSinceEpoch() const
NSDate *toNSDate() const
QDateTimetoOffsetFromUtc(int offsetSeconds) const
qint64toSecsSinceEpoch() const
(since 6.4) std::chrono::sys_time<std::chrono::milliseconds>toStdSysMilliseconds() const
(since 6.4) std::chrono::sys_secondstoStdSysSeconds() const
QStringtoString(const QString &format, QCalendar cal) const
QStringtoString(Qt::DateFormat format = Qt::TextDate) const
QStringtoString(const QString &format) const
QStringtoString(QStringView format) const
QStringtoString(QStringView format, QCalendar cal) const
QDateTimetoTimeZone(const QTimeZone &timeZone) const
QDateTimetoUTC() 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) QDateTimecurrentDateTime(const QTimeZone &zone)
QDateTimecurrentDateTime()
QDateTimecurrentDateTimeUtc()
qint64currentMSecsSinceEpoch()
qint64currentSecsSinceEpoch()
QDateTimefromCFDate(CFDateRef date)
QDateTimefromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
(since 6.5) QDateTimefromMSecsSinceEpoch(qint64 msecs)
QDateTimefromNSDate(const NSDate *date)
QDateTimefromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone)
(since 6.5) QDateTimefromSecsSinceEpoch(qint64 secs)
(since 6.4) QDateTimefromStdLocalTime(const std::chrono::local_time<std::chrono::milliseconds> &time)
(since 6.4) QDateTimefromStdTimePoint(const std::chrono::time_point<Clock, Duration> &time)
(since 6.4) QDateTimefromStdTimePoint(std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> time)
(since 6.4) QDateTimefromStdTimePoint(const std::chrono::local_time<std::chrono::milliseconds> &time)
(since 6.4) QDateTimefromStdZonedTime(const int &time)
QDateTimefromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
(since 6.0) QDateTimefromString(QStringView string, Qt::DateFormat format = Qt::TextDate)
(since 6.0) QDateTimefromString(QStringView string, QStringView format, QCalendar cal)
(since 6.0) QDateTimefromString(const QString &string, QStringView format, QCalendar cal)
QDateTimefromString(const QString &string, const QString &format, QCalendar cal)
(自6.7起) QDateTimefromString(QStringView string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
(自6.7起) QDateTimefromString(QStringView string, QStringView format, int baseYear, QCalendar cal)
(自6.7起) QDateTimefromString(const QString &string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
(since 6.0) QDateTimefromString(const QString &string, QStringView format, int baseYear, QCalendar cal)
(自6.7起) QDateTimefromString(const QString &string, const QString &format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
QDateTimefromString(const QString &string, const QString &format, int baseYear, QCalendar cal)
booloperator!=(const QDateTime &lhs, const QDateTime &rhs)
(since 6.4) QDateTimeoperator+(const QDateTime &dateTime, std::chrono::milliseconds duration)
(since 6.4) QDateTimeoperator+(std::chrono::milliseconds duration, const QDateTime &dateTime)
(自6.4起) std::chrono::millisecondsoperator-(const QDateTime &lhs, const QDateTime &rhs)
(since 6.4) QDateTimeoperator-(const QDateTime &dateTime, std::chrono::milliseconds duration)
booloperator<(const QDateTime &lhs, const QDateTime &rhs)
QDataStream &operator<<(QDataStream &out, const QDateTime &dateTime)
booloperator<=(const QDateTime &lhs, const QDateTime &rhs)
booloperator==(const QDateTime &lhs, const QDateTime &rhs)
booloperator>(const QDateTime &lhs, const QDateTime &rhs)
booloperator>=(const QDateTime &lhs, const QDateTime &rhs)
QDataStream &operator>>(QDataStream &in, QDateTime &dateTime)

详细说明

QDateTime对象根据时间表示方法编码日历日期和时钟时间("datetime")。它结合了QDateQTime类的功能。它可以从系统时钟读取当前datetime。它提供比较datetimes和通过添加秒数、天数、月数或年数来操作datetime的函数。

QDateTime可以描述以下几种相关的时间:本地时间、UTC、指定从UTC的偏移量或指定的时间区域。每种时间表示都可以封装在合适的QTimeZone类实例中。例如,"Europe/Berlin"时间区域将应用德国使用的夏令时规则。相比之下,距离UTC+3600秒的固定偏移量比UTC提前一小时(通常用ISO标准表示法写成"UTC+01:00"),没有任何夏令时的复杂性。当使用本地时间或指定的时间区域时,会考虑时区转换(参见下文)。QDateTime的timeSpec()会告诉您正在使用哪种类型的时间表示;其timeRepresentation()提供了一个完整的QTimeZone时间表示的描述。

QDateTime对象通常通过在构造函数中显式提供日期和时间,或者使用例如currentDateTime()或fromMSecsSinceEpoch()等静态函数来创建。可以使用setDate()和setTime()来更改日期和时间。还可以使用setMSecsSinceEpoch()函数设置一个 datetime,该函数接收自1970年1月1日起的UTC时间的毫秒数。fromString()函数根据字符串和用于解释字符串中日期的日期格式返回一个

QDateTime::currentDateTime()返回一个表示当前日期和时间的QDateTime,该时间与特定的时间表示相关,如本地时间(默认情况下)。QDateTime::currentDateTimeUtc()返回一个表示当前日期和时间的QDateTime,相对于UTC;它与QDateTime::currentDateTime(QTimeZone::UTC)等效。

date()和time()函数提供对datetime的时间和日期部分的访问。相同的详细信息也由toString()函数以文本格式提供。

QDateTime提供了一整套比较两个QDateTime对象的运算符,其中较小表示较早,较大表示较晚。

您可以使用addMSecs()以毫秒为单位增加(或减少)datetime,使用addSecs()以秒为单位增加(或减少)datetime,或使用addDays()以天为单位增加(或减少)datetime。类似地,您可以查询addMonths()和addYears()。函数daysTo()返回两个datetime之间的天数,secsTo()返回两个datetime之间的秒数,msecsTo()返回两个datetime之间的毫秒数。这些操作了解夏令时(DST)和其他时区转换,当适用时。

使用toTimeZone()将datetime重新表述为不同的时间表示。通过传递表示本地时间、UTC或UTC的固定偏移的轻量级QTimeZone,可以将datetime转换为相应的时间表示;或者,您可以传递完整的时间区域(其timeSpec()是Qt::TimeZone)来使用它。

注释

注意:QDateTime不计算闰秒。

注意:所有转换为和从字符串格式的操作都是使用C区域设置完成的。对于本地化的转换,请参阅QLocale

注意:公历没有公元0年。该年份的日期被视为无效。公元前1年是指“公元前1年”或“公元1年之前。”公元1月1日之前的日期是公元前1年12月31日。

注意:使用本地时间(默认)或指定的时区意味着需要解决关于时区转换的问题。因此,对这些QDateTime实例(特别是包含构造它们)的操作可能比使用UTC或其固定偏移量更昂贵。

有效日期范围

QDateTime能够表示的值范围取决于内部存储实现。QDateTime目前以一个qint64作为序列毫秒值存储,编码日期和时间。这使得日期范围限制在约±2.92亿年,相对于QDate的±20亿年范围。在创建具有极端值的QDateTime时,必须小心不要溢出存储。支持值的精确范围取决于使用的时间表示。

时区的使用

QDateTime使用系统的时间区域信息来确定当前本地时间区域以及它与UTC的偏移量。如果系统配置不正确或不更新,那么QDateTime将给出错误的结果。

QDateTime同样使用系统提供的其他时区UTC偏移量的信息。如果此信息不完整或过时,QDateTime将给出错误结果。有关详细信息,请参阅QTimeZone文档。

在现代Unix系统中,这意味着QDateTime在有可能的情况下通常会准确了解历史上的转换(包括夏令时,见下文)。在Windows上,由于系统不支持历史时区数据,历史准确性不会在时区转换方面得到维持,特别是包括夏令时。然而,使用ICU库构建Qt将为QTimeZone配备与Unix相同的时区数据库。

时区转换

QDateTime考虑了时区转换,包括标准时间和夏令时(DST)之间的转换,以及时区更改其标准偏移量时出现的转换。例如,如果转换在凌晨2点进行,时钟就会前进到3点,那么从02:00:00到02:59:59.999之间就存在一个“缺失”的小时。这种转换称为“春回”,跳过的时间没有意义。当转换方向相反时,称为“秋后”,一个时间间隔会被重复,首先是旧区域(通常是夏令时),然后是新区域(通常是标准时间),因此该时间间隔是模糊的。

一些区域使用“反向”的夏令时,夏季使用标准时间,冬季使用夏令时(降低偏移量)。对于此类区域,春天的“春回”仍然在春天发生并跳过一个小时,但这是一种从夏令时离开的转换,而秋后的重复秋季小时是从标准时间转到夏令时的转换。

在从UTC时间(或UTC偏移量固定的时间)转换时,总是任何时区中的无歧义有效结果。然而,当将日期和时间组合成datetime,以本地时间或特定时区表达时,名义结果可能会落在转换期间,使其无效或模糊。可能出现这种情况的方法中包含一个resolve参数:如果请求的datetime是有效且无歧义的,则始终忽略该参数。有关它可以让您控制的选项,请参阅TransitionResolution。在Qt 6.7之前,选择的是其LegacyBehavior

对于跳过的闰秒时间间隔,无论使用偏移量解释请求的时间,都会得到一个实际时间,该时间使用的是另一偏移量;因此,对于 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 位 time_t 类型可以表示的 QDateTime 的完整范围),使用标准系统 API 确定本地时间与 UTC 的偏差。对于这些系统 API 无法处理的日期时间(可能包括一些在 time_t 范围内的),如果可用,则使用 QTimeZone::systemTimeZone(),或者尽力进行估算。在任何情况下,使用的偏移信息取决于系统,可能不完整,或者对于过去的时间,历史可能不准确。此外,对于未来的日期,本地时区偏移量和夏令时规则在那天到来之前可能会改变。

整天的过渡

少数时区在越过自己时,因调整国际日期变更线而跳过了或重复了整个日子。对于这些时区,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分钟的多倍。历史时区范围更广,可能包括秒的偏移量;这些最后的不能在字符串中忠实地表示。

另请参阅QDateQTimeQDateTimeEditQTimeZone

成员类型文档

[since 6.7]枚举类QDateTime::TransitionResolution

此枚举用于解决落在时区转换中的日期时间组合。

当按本地时间指定日期时间或具有夏令时就区,或者使用setDate()、setTime()或setTimeZone()修改时,所提供的参数可能意味着在该时区中有意义或有两个意义的时间表示。这些时间表示被称为在转换中。在两种情况下,我们可以简单地返回一个无效的日期时间,以表示该操作定义不当。在含糊不清的情况下,我们可以选择两种可能被意味着的时间之一。在没有意义的情况下,我们可以选择在这种可能被认为有意义的两边之一的时间。例如,从较早的时间推进时,我们可以选择实际的转换后时间,该时间实际上是之前所说的时间之后指定的那段时间。这里指定的选项配置了如何执行这种选择。

常量描述
QDateTime::TransitionResolution::Reject0将转换中的任何时间视为无效。要么它确实是,要么它是含糊不清的。
QDateTime::TransitionResolution::RelativeToBefore1选择的时间仿佛是在转换之前的时间向上迈进。这使用转换之前生效的偏移量来解释请求的时间,如果有必要,将其转换为结果时间生效的偏移量。
QDateTime::TransitionResolution::RelativeToAfter2选择的时间仿佛是在转换之后的时间向下后退。这使用转换之后生效的偏移量来解释请求的时间,如果有必要,将其转换为结果时间生效的偏移量。
QDateTime::TransitionResolution::PreferBefore3选择转换之前的时刻。
QDateTime::TransitionResolution::PreferAfter4选择转换之后的时刻。
QDateTime::TransitionResolution::PreferStandard5选择转换的标准时间侧的时间。
QDateTime::TransitionResolution::PreferDaylightSaving6选择转换的夏令时侧的时间。
QDateTime::TransitionResolution::LegacyBehaviorRelativeToBeforeRelativeToBefore的别名,用作默认的TransitionResolution参数,因为这与Qt 6.7之前的操作最接近。

对于addDaysaddMonthsaddYears,行为和多数时间里都是:如果添加正值调整,则使用RelativeToBefore,如果添加负值调整,则使用RelativeToAfter

注意: 在夏令时增加与协调世界时(UTC)的偏移量(称为“正值 DST”)时区中,PreferStandard 是 RelativeToAfter 的别名,PreferDaylightSaving 是 RelativeToBefore 的别名。在夏令时机制是在冬季减少与 UTC 偏移量(称为“负值 DST”)时区中时,情况相反,但前提是操作系统报告-正如大多数平台那样-一个时间是否在 DST 或标准时间。对于某些平台,即使在 Qt::TimeZone 日期时间中,转换时间不可用,QTimeZone 必须假定与 UTC 偏移量低的边是标准时间,实际上假定正值 DST。

以下表格说明了如何在具有名为标准时间 LST 和 DMT 生命周期的两个方面的可能情况下,转换时间为 02:30 的日期请求,在本地时间从 02:00 到 03:00 之间转换,转换类型可能是跳过一小时或重复一小时。转换类型和参数 resolve 的值决定在给定日期上选择哪个实际时间。首先,正向夏令时的常见情况,其中

之前02:00–03:00之后resolveselected
LST跳过LDTRelativeToBefore03:30 LDT
LST跳过LDTRelativeToAfter01:30 LST
LST跳过LDTPreferBefore01:30 LST
LST跳过LDTPreferAfter03:30 LDT
LST跳过LDTPreferStandard01:30 LST
LST跳过LDTPreferDaylightSaving03:30 LDT
LDT重复LSTRelativeToBefore02:30 LDT
LDT重复LSTRelativeToAfter02:30 LST
LDT重复LSTPreferBefore02:30 LDT
LDT重复LSTPreferAfter02:30 LST
LDT重复LSTPreferStandard02:30 LST
LDT重复LSTPreferDaylightSaving02:30 LDT

其次,针对负夏令时的情况,使用冬季的 LDT,跳过一小时以在夏季切换到 LST,然后在回到冬季时重复一小时。

LDT跳过LSTRelativeToBefore03:30 LST
LDT跳过LSTRelativeToAfter01:30 LDT
LDT跳过LSTPreferBefore01:30 LDT
LDT跳过LSTPreferAfter03:30 LST
LDT跳过LSTPreferStandard03:30 LST
LDT跳过LSTPreferDaylightSaving01:30 LDT
LST重复LDTRelativeToBefore02:30 LST
LST重复LDTRelativeToAfter02:30 LDT
LST重复LDTPreferBefore02:30 LST
LST重复LDTPreferAfter02:30 LDT
LST重复LDTPreferStandard02:30 LST
LST重复LDTPreferDaylightSaving02:30 LDT

可以使用 Reject 来提示相关的 QDateTime API 返回一个无效的时间戳对象,以便您的代码可以自行处理过渡,例如通过提醒用户他们选择的日期时间处于转换间隔,以便他们有机会解决冲突或歧义。使用此方法的代码可能会发现上面提到的其他选项非常有用,以确定其(或用户的)解决方案中要使用的相关信息。如果过渡的开始或结束,或过渡本身是正确解决,可以使用 QTimeZone 的过渡 API 获取这些信息。您可以使用secsTo() 来测量前一天的午后再到下一整天的时间,以确定转换是重复的还是跳过的间隔。对于跳过的间隔(如春季向前移动),结果将少于 48 小时,对于重复的间隔(如秋季向后移动),结果将超过 48 小时。

注意: 当指定除 Reject 以外的解决方法时,如果可能,将返回一个有效的 QDateTime 对象。如果请求的日期时间处于间隙中,返回的日期时间将不具有请求的 time() - 或者在某些情况下,如果整个一天被跳过,则具有 date ()。因此,您可以通过比较 date() 和 time() 来检测何时遇到间隙。

与其他日期时间软件的关系

Python 编程语言的 datetime API 有一个与 RelativeToBeforefold = True)对应的 RelativeToAfterfold = False)参数。

提议用JavaScript的Date替换Temporal,提供了四个选项来确定一个转换,作为disambiguation参数的值。其'reject'选项会抛出一个异常,这基本上与Reject产生一个非法结果相对应。其'earlier'和'later'选项分别对应于PreferBeforePreferAfter'compatible'选项对应于RelativeToBefore(以及Python的fold = True)。

此枚举类型在Qt 6.7中引入。

另请参阅时区转换和QDateTime::TransitionResolution。

枚举类QDateTime::YearRange

此枚举类型描述了由QDateTime可以表示的公历年份范围

常量描述
QDateTime::YearRange::First-292275056本年的后期可以表示
QDateTime::YearRange::Last+292278994本年的前期可以表示

所有严格位于这两个年份之间的日期也可以表示。注意,然而,公历没有零年。

注意:QDate可以描述更广泛的年份范围。对于大多数用途,这几乎没有什么区别,因为QDateTime可以支持的年份范围可以达到1970年两侧近2.92亿年。

另请参阅isValid()和QDate

成员函数文档

QString QDateTime::toString(QStringView format, QCalendar cal) const

QString QDateTime::toString(const QString &format, QCalendar cal) const

返回日期时间作为字符串。参数format确定结果字符串的格式。如果提供了cal,它确定表示日期所使用的日历;默认为公历。在Qt 5.14之前,没有cal参数,总是使用公历。有关格式参数中支持的时间和日期指定符,请参阅QTime::toString()和QDate::toString

单引号中的任何字符序列都将原样包含在输出字符串中(去除引号),即使它包含格式化字符。连续的两个单引号("''")在输出中将替换为单个引号。格式字符串中的所有其他字符都将原样包含在输出字符串中。

支持不带分隔符的格式(例如:"ddMM"),但必须小心使用,因为生成的字符串并不总是可靠可读(例如,如果"dM"产生"212",它可能是12月2日或2月21日)。

示例格式字符串(假设QDateTime为21 May 2001 14:13:09.120)

格式结果
dd.MM.yyyy21.05.2001
ddd MMMM d yyTue May 21 01
hh:mm:ss.zzz14:13:09.120
hh:mm:ss.z14:13:09.12
h:m:s ap2:13:9 pm

如果日期时间无效,将返回空字符串。

注意:日和月名称以及上午/下午指示器以英文(Clocale)给出。为了获取本地化的月和日名称以及本地化的AM/PM形式,请使用QLocale::system().toDateTime()。

另请参阅fromString(),QDate::toString(),QTime::toString(),以及QLocale::toString()。

[noexcept] QDateTime::QDateTime()

使用本地时间构造一个空日期时间。

空日期时间无效,因为它的日期和时间都不有效。

另请参阅isValid(),setMSecsSinceEpoch(),setDate(),setTime()和setTimeZone()。

QDateTime::QDateTime(QDate dateQTime time,const QTimeZone &timeZoneQDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)

使用给定的 datetime,并使用由 timeZone 描述的时间表示构造一个日期时间。

如果 date 有效而 time 无效,则将时间设置为午夜。如果在 timeZone 中接近转变的时刻,resolve 控制如何解决这种情况。

注意:在 Qt 6.7 之前,此函数版本缺少 resolve 参数,因此无法解决与转变相关的模糊性。

[since 6.5] QDateTime::QDateTime(QDate dateQTime timeQDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)

这是一个重载的函数。

使用给定的 datetime,并使用本地时间构造一个日期时间。

如果 date 有效而 time 无效,则使用午夜作为时间。如果在本地时间的转变时刻附近,resolve 控制如何解决这种情况。

注意:在 Qt 6.7 之前,此函数版本缺少 resolve 参数,因此无法解决与转变相关的模糊性。

此函数在 Qt 6.5 中引入。

[noexcept] QDateTime::QDateTime(const QDateTime &other)

构造 other 日期时间的副本。

[noexcept] QDateTime::QDateTime(QDateTime &&other)

将临时 other 日期时间的内 容移动到此对象,并使 other 处于一个不确定(但正确)的状态。

[noexcept] QDateTime::~QDateTime()

销毁日期时间。

QDateTime QDateTime::addDays(qint64 ndays) const

返回一个 QDateTime 对象,包含比此对象日期时间早 ndays 天(如果 ndays 为负)或晚 ndays 天的日期时间。

如果timeSpec()是Qt::LocalTimeQt::TimeZone,并且得到的日期和时间落在标准时间和夏令时转换的小时内,则结果将超出这个间隔,方向是变化的。如果转换发生在凌晨2点,时钟前进到3点,则凌晨2点到3点之间的目标结果将调整为在凌晨2点之前(如果ndays < 0)或之后3点(否则)。

另请参阅daysTo()、addMonths()、addYears()、addSecs()和Timezone transitions

[自从 6.4] QDateTime QDateTime::addDuration(std::chrono::milliseconds msecs) const

返回一个QDateTime对象,其中包含比此对象的日期和时间晚msecs毫秒的日期和时间(如果msecs是负数,则更早)。

如果此日期时间无效,则返回一个无效的日期时间。

注意:使用std::chrono::monthsstd::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::LocalTimeQt::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年的日期时间(如果是负数,则是更早的时间)。

如果timeSpec()是Qt::LocalTimeQt::TimeZone,并且结果日期和时间落在标准时间和夏令时的转换小时,则结果将超过此间隔,并在变化方向上。如果转换在凌晨2点进行并且时钟前进到凌晨3点,则目标在凌晨2点和凌晨3点之间将被调整为在凌晨2点之前(如果nyears < 0)或凌晨3点之后(否则)。

另请参阅daysTo(),addDays(),addMonths(),addSecs()和时区转换

[静态,自6.5版本起] QDateTime QDateTime::currentDateTime(const QTimeZone &zone)

返回系统时钟的当前日期和时间,使用zone描述的时间表示。如果省略zone,则使用本地时间。

此函数在 Qt 6.5 中引入。

另请参阅currentDateTimeUtc(),QDate::currentDate(),QTime::currentTime()和toTimeSpec

[静态] QDateTime QDateTime::currentDateTime()

这是一个重载的函数。

[静态] QDateTime QDateTime::currentDateTimeUtc()

返回以UTC表示的系统时钟的当前日期和时间。

相当于currentDateTime(QTimeZone::UTC)

另请参阅currentDateTime(),QDate::currentDate(),QTime::currentTime()和toTimeSpec

[静态 noexcept] qint64 QDateTime::currentMSecsSinceEpoch()

返回自1970年以来的当前毫秒数,以UTC为基准。

这个数字类似于POSIX的time_t变量,但是以毫秒为单位而不是秒。

另请参阅currentDateTime(),currentDateTimeUtc()和toTimeSpec

[静态 noexcept] qint64 QDateTime::currentSecsSinceEpoch()

返回自1970年以来的UTC起始时间秒数。

这个数字类似于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 日期时间早于当前日期时间,则返回的值是负数。

示例

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); // Make endDate before startDate.
qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);

另请参阅addDays(),secsTo() 和 msecsTo()。

[静态] QDateTime QDateTime::fromCFDate(CFDateRef date)

构建一个新的 QDateTime,其中包含 CFDate date 的副本。

另请参阅toCFDate()。

[静态] QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)

这是一个重载的函数。

返回一个表示 1970 年年初开始 UTC 时间后的给定 msecs 毫秒时刻的日期时间。所描述的时区由 timeZone 确定。默认的时间表示为本地时间。

请注意,msecs 的可能值在 QDateTime 的有效范围内,无论是负数还是正数。对于这些值该函数的行为是未定义的。

另请参阅fromSecsSinceEpoch(),toMSecsSinceEpoch() 和 setMSecsSinceEpoch()。

[静态,自 6.5 以来] QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs)

这是一个重载的函数。

此函数在 Qt 6.5 中引入。

[静态] QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone)

[静态] QDateTime QDateTime::fromNSDate(const NSDate *date)

另请参阅toNSDate()。

[静态] QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone)

这是一个重载的函数。

返回一个表示从 1970 年年初开始 UTC 时间后的给定 secs 秒时刻的日期时间。所描述的时区由 timeZone 确定。默认的时间表示为本地时间。

请注意,存在可能的 secs 值,这些值在 QDateTime 的有效范围内,无论是负数还是正数。对于这些值该函数的行为是未定义的。

另请参阅 fromMSecsSinceEpoch()、toSecsSinceEpoch() 以及 setSecsSinceEpoch

[static, since 6.5] QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs)

这是一个重载的函数。

此函数在 Qt 6.5 中引入。

[static, since 6.4] QDateTime QDateTime::fromStdLocalTime(const std::chrono::local_time<std::chrono::milliseconds> &time)

创建一个日期时间为从1970-01-01T00:00:00.000开始计算的本地时间(Qt::LocalTime)的毫秒数所代表的值。

注意:此函数需要C++20。

此函数是在Qt 6.4中引入的。

另请参阅 toStdSysMillisecondsfromMSecsSinceEpoch

[static, since 6.4] 模板 <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以及必要的持续时间类型转换(转换/四舍五入/...),以便输入满足上述约束。

注意:此函数需要C++20。

此函数是在Qt 6.4中引入的。

另请参阅 toStdSysMillisecondsfromMSecsSinceEpoch

[static, since 6.4] QDateTime QDateTime::fromStdTimePoint(std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> time)

这是一个重载的函数。

使用Qt::UTC作为其时间表示形式,构造表示与time相同时间点的日期时间。

此函数是在Qt 6.4中引入的。

[static, since 6.4] QDateTime QDateTime::fromStdTimePoint(std::chrono::local_time<std::chrono::milliseconds> &time)

创建一个日期时间为从1970-01-01T00:00:00.000开始计算的本地时间(Qt::LocalTime)的毫秒数所代表的值。

注意:此函数需要C++20。

此函数是在Qt 6.4中引入的。

另请参阅 toStdSysMillisecondsfromMSecsSinceEpoch

[static, since 6.4] QDateTime QDateTime::fromStdZonedTime(const int &time)

创建一个与time相同时间点的日期时间。结果将使用time的时间区域进行表达。

注意:此函数需要C++20。

此函数是在Qt 6.4中引入的。

另请参阅 QTimeZonetoStdSysMilliseconds() 以及 fromMSecsSinceEpoch

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

返回由指定的字符串和格式表示的QDateTime,如果无法完成,则返回无效的日期时间。

注意:对于Qt::TextDate,只识别英文简短月份名称(例如,“Jan”是简写形式,“January”是完整形式)。

另请参阅toString()和QLocale::toDateTime

[静态,自6.0起] QDateTime QDateTime::fromString(QStringView string, Qt::DateFormat format = Qt::TextDate)

这是一个重载的函数。

此函数自Qt 6.0版本开始引入。

[静态,自6.0起] QDateTime QDateTime::fromString(QStringView string, QStringView format, QCalendar cal)

这是一个重载的函数。

此函数自Qt 6.0版本开始引入。

[静态,自6.0起] QDateTime QDateTime::fromString(const QString &string, QStringView format, QCalendar cal)

这是一个重载的函数。

此函数自Qt 6.0版本开始引入。

[静态] QDateTime QDateTime::fromString(const QString &string, const QString &format, QCalendar cal)

这是一个重载的函数。

[静态,自6.7起] QDateTime QDateTime::fromString(QStringView string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)

这是一个重载的函数。

使用默认构造的QCalendar

此函数自Qt 6.7版本开始引入。

[静态,自6.7起] QDateTime QDateTime::fromString(QStringView string, QStringView format, int baseYear, QCalendar cal)

这是一个重载的函数。

此函数自Qt 6.7版本开始引入。

[静态,自6.7起] QDateTime QDateTime::fromString(const QString &string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)

这是一个重载的函数。

使用默认构造的QCalendar

此函数自Qt 6.7版本开始引入。

[静态,自6.0起] QDateTime QDateTime::fromString(const QString &string, QStringView format, int baseYear, QCalendar cal)

这是一个重载的函数。

此函数自Qt 6.0版本开始引入。

[静态,自6.7以来] QDateTime QDateTime::fromString(const QString &string, const QString &format, int baseYear = QLocale::DefaultTwoDigitBaseYear)

这是一个重载的函数。

使用默认构造的QCalendar

此函数自Qt 6.7版本开始引入。

[静态] QDateTime QDateTime::fromString(const QString &string, const QString &format, int baseYear, QCalendar cal)

返回由字符串表示的日期时间,使用给定的格式,如果字符串无法解析,则返回无效的日期时间。

如果提供了cal日历,则使用该日历,否则使用公历。

格式只指定年份的最后两位时,以baseYear为起点的100年是首先考虑的候选年份。在6.7之前没有baseYear参数,总是使用1900年。这是baseYear的默认值,选择从那时到1999年的年份。在某些情况下,其他字段可能会选择下一个或上一个世纪,以获得与所有给定字段一致的结果。有关详细信息,请参阅QDate::fromString()。

除了由QDate::fromString()和QTime::fromString()识别的表示日期和时间部分的格式字符串中的表达式之外,此方法还支持

表达式输出
t时区(偏移量、名称、"Z"或带有"UTC"前缀的偏移量)
tt时区以无分隔符(例如 "+0200")的偏移量格式表示
ttt时区以带分隔符(例如 "+02:00")的偏移量格式表示
tttt时区名称(例如 "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。如果格式满足但字符串表示的日期时间无效(例如,在时区转换中跳过的间隙中),则返回一个有效的QDateTime,表示一个最近的、有效的日期时间。

没有任何前导零(d、M、h、m、s、z)的表达式将是贪婪的。这意味着即使这会使它们超出范围或为其他部分留下很少的数字,它们也将使用两位(或z为三位)数字。

QDateTime dateTime = QDateTime::fromString("130", "Mm"); // invalid

这可能会意味着00:30.00的1月1日,但M将会抓取两位数字。

如果错误地指定了字符串的域,将返回无效的 QDateTime。例如,考虑以下代码,在这里两位数的年份 12 被读取为 1912(下面表格中列出所有默认值);由于 1912 年 4 月 23 日是星期二,不是星期一,因此结果日期时间无效。

QString string = "Monday, 23 April 12 22:51:41";
QString format = "dddd, d MMMM yy hh:mm:ss";
QDateTime invalid = QDateTime::fromString(string, format);

正确的代码如下:

QString string = "Tuesday, 23 April 12 22:51:41";
QString format = "dddd, d MMMM yy hh:mm:ss";
QDateTime valid = QDateTime::fromString(string, format);

注意:星期和月份的名称以及上午/下午指示符必须使用英语(C 代码库)。如果需要识别本地化的月份和星期名称或本地化的上午/下午形式,请使用 QLocale::system().toDateTime()。

注意:如果格式字符的重复次数比上面的表格中使用它的最长表达式还要多次,那么这部分格式将被读取为几个没有分隔符的表达式;最长的表达式重复次数与它的副本数量相等,最后可能是一个较短的语句。因此,'tttttt' 将匹配 "Europe/BerlinEurope/Berlin" 并将时区设置为柏林时间;如果日期时间字符串包含 "Europe/BerlinZ",它将“匹配”但会产生不一致的结果,导致无效的日期时间。

另请参阅 toString(),QDate::fromString(),QTime::fromString(),以及 QLocale::toDateTime

bool QDateTime::isDaylightTime() const

返回此日期时间是否在夏令时。

如果 Qt::TimeSpec 不是 Qt::LocalTimeQt::TimeZone,那么将始终返回 false。

另请参阅 timeSpec

bool QDateTime::isNull() const

如果日期和时间都是 null,则返回 true;否则返回 false。null 日期时间无效。

另请参阅 QDate::isNull(),QTime::isNull(),和 isValid

bool QDateTime::isValid() const

如果此日期时间表示一个确定的时间点,则返回 true,否则返回 false

如果日期和时间都有效,且使用的时间表示法能够赋予它们的组合有效的意义,则日期时间有效。当时间表示法是特定时区或本地时间时,某些日期可能会有一些时间段在该表示法中被跳过,例如在夏令时转换时跳过一个小时(通常在春季的夜晚)。例如,如果夏令时在凌晨 2 点结束,时钟向前拨到 3 点,那么那天从 02:00:00 到 02:59:59.999 的日期时间都是无效的。

另请参阅 QDateTime::YearRangeQDate::isValid(),和 QTime::isValid

qint64 QDateTime::msecsTo(const QDateTime &other) const

返回从当前日期时间到 其他 日期时间的毫秒数。如果 其他 日期时间早于当前日期时间,返回的值是负数。

在进行比较之前,将两个日期时间都转换为 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,以确保如果 daylight-saving (DST) 应用于两个日期时间中的一个而不适用于另一个,结果仍然是正确的。

如果任何日期时间无效,则返回 0。

示例

QDateTime now = QDateTime::currentDateTime();
QDateTime xmas(QDate(now.date().year(), 12, 25).startOfDay());
qDebug("There are %d seconds to Christmas", now.secsTo(xmas));

另请参阅addSecsdaysTo,以及QTime::secsTo

void QDateTime::setDate(QDate date, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)

将此日期时间的日期部分设置为date

如果没有设置时间,则将其设置为午夜。如果date无效,则此QDateTime成为无效。

如果datetime()描述了一个接近此日期时间的这段时间的转换时刻,则resolve控制如何解决这种情况。

注意:在 Qt 6.7 之前,此函数版本缺少 resolve 参数,因此无法解决与转变相关的模糊性。

另请参阅datesetTime,以及setTimeZone

void QDateTime::setMSecsSinceEpoch(qint64 msecs)

将日期时间设置为表示1970年1月1日开始后的给定毫秒数msecs的某个时刻。

在不支持时区的系统上,此函数将表现得像本地时间是Qt::UTC一样。

请注意,传递qint64的最小值(std::numeric_limits<qint64>::min())到msecs会导致未定义的行为。

另请参阅setSecsSinceEpochtoMSecsSinceEpoch,以及fromMSecsSinceEpoch

void QDateTime::setSecsSinceEpoch(qint64 secs)

将日期时间设置为表示1970年1月1日开始后的给定秒数secs的某个时刻。

在不支持时区的系统上,此函数将表现得像本地时间是Qt::UTC一样。

另请参阅 setMSecsSinceEpoch(),toSecsSinceEpoch(),以及 fromSecsSinceEpoch()。

void QDateTime::setTime(QTime timeQDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)

将此日期时间的时部分设置为 time。如果 time 无效,此函数将其设置为午夜。因此,您可以通过将其设置为默认的 QTime 来清除 QDateTime 中的任何设置时间。

QDateTime dt = QDateTime::currentDateTime();
dt.setTime(QTime());

如果 date() 和 time 描述的瞬间接近此日期时间的时间表示法中的一个转变,resolve 控制如何解决这种情况。

注意:在 Qt 6.7 之前,此函数版本缺少 resolve 参数,因此无法解决与转变相关的模糊性。

另请参阅 time(),setDate(),以及 setTimeZone()。

void QDateTime::setTimeZone(const QTimeZone &toZoneQDateTime::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,表示此日期时间如何表示时间。

返回的 QTimeZonetimeSpec() 将与此 datetime 的相匹配;如果它不是 Qt::TimeZone,则返回的 QTimeZone 是时间表示。当它们的 timeSpec() 是 Qt::OffsetFromUTC 时,返回的 QTimeZone 的 fixedSecondsAheadOfUtc() 提供偏移量。当 timeSpec() 是 Qt::TimeZone 时,QTimeZone 对象本身是该时区的完整表示。

此函数在 Qt 6.5 中引入。

另请参阅 timeZone(),setTimeZone() 和 QTimeZone::asBackendZone

Qt::TimeSpec QDateTime::timeSpec() const

返回 datetime 的时间规范。

这将其时间表示分为本地时间、UTC、从 UTC 的固定偏移量(不指示偏移量)或时区(不给出该时区的细节)。等价于 timeRepresentation().timeSpec()

另请参阅 setTimeSpec(),timeRepresentation(),date() 和 time

QTimeZone QDateTime::timeZone() const

返回 datetime 的时区。

结果是与 timeRepresentation().asBackendZone() 相同。在所有情况下,结果 timeSpec() 是 Qt::TimeZone

timeSpec() 是 Qt::LocalTime 时,结果将描述调用该方法时的本地时间。即使从其中获取的 QDateTime 发生了系统时区更改,也不会反映这些更改。

另请参阅 timeRepresentation(),setTimeZone(),Qt::TimeSpecQTimeZone::asBackendZone

QString QDateTime::timeZoneAbbreviation() const

返回此 datetime 的时区缩写。

返回的字符串取决于 timeSpec()

注意:缩写不一定保证是唯一的,即不同的时区可能有相同的缩写。对于 Qt::LocalTimeQt::TimeZone,当由主机系统返回时,缩写可能本地化。

另请参阅 timeSpec() 和 QTimeZone::abbreviation

CFDateRef QDateTime::toCFDate() const

QDateTime 创建一个 CFDate。

调用者拥有 CFDate 对象,并负责释放它。

另请参阅 fromCFDate

QDateTime QDateTime::toLocalTime() const

返回一个本地时间的此 datetime 的副本。

结果表示与该日期时间相同的时刻,且与该日期时间相等。

示例

QDateTime UTC(QDateTime::currentDateTimeUtc());
QDateTime local(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(),fromMSecsSinceEpoch(),和 setMSecsSinceEpoch()。

NSDate *QDateTime::toNSDate() const

从一个 QDateTime 中创建一个 NSDate。

该 NSDate 对象将自动释放。

另请参阅 fromNSDate

QDateTime QDateTime::toOffsetFromUtc(int offsetSeconds) const

返回将此日期时间转换为给定 offsetSecondsQt::OffsetFromUTC 规范的副本。相当于 toTimeZone(QTimeZone::fromSecondsAheadOfUtc(offsetSeconds))

如果 offsetSeconds 等于 0,则返回 UTC 日期时间。

结果表示与该日期时间相同的时刻,且与该日期时间相等。

另请参阅 setOffsetFromUtc(),offsetFromUtc(),和 toTimeZone

qint64 QDateTime::toSecsSinceEpoch() const

返回自1970年年初以来的秒数。

在不支持时区的系统上,此函数将表现得像本地时间是Qt::UTC一样。

如果该对象中存储的日期时间无效,则此函数的行为未定义。然而,对于所有有效的日期,此函数都返回一个唯一的值。

另请参阅 toMSecsSinceEpoch(),fromSecsSinceEpoch(),和 setSecsSinceEpoch

[自6.4版本开始] std::chrono::sys_time<std::chrono::milliseconds> QDateTime::toStdSysMilliseconds() const

将此日期时间对象转换为使用 std::chrono::system_clock 作为时钟的毫秒表示的等效时间点。

注意:此函数需要C++20。

此函数是在Qt 6.4中引入的。

另请参阅 fromStdTimePoint() 和 toMSecsSinceEpoch

[自6.4版本开始] std::chrono::sys_seconds QDateTime::toStdSysSeconds() const

将此日期时间对象转换为使用 std::chrono::system_clock 作为时钟的秒表示的等效时间点。

注意:此函数需要C++20。

此函数是在Qt 6.4中引入的。

另请参阅 fromStdTimePoint() 和 toSecsSinceEpoch

QString QDateTime::toString(Qt::DateFormat format = Qt::TextDate) const

这是一个重载的函数。

以给定的 format 返回日期时间的字符串。

如果 formatQt::TextDate,则按默认方式格式化字符串。星期和月名将使用英语。这种格式的示例是 "Wed May 20 03:40:13 1998"。有关本地化格式化,请参阅 QLocale::toString

如果格式为Qt::ISODate,字符串格式对应于ISO 8601对日期和时间表示的扩展规范,形式为yyyy-MM-ddTHH:mm:ss[Z|±HH:mm],具体取决于timeSpec()的QDateTime。如果timeSpec()为Qt::UTC,则会附加Z到字符串;如果timeSpec()为Qt::OffsetFromUTC,则会在字符串中附加UTC小时和分钟的偏移量。要包括ISO 8601日期中的毫秒,请使用格式Qt::ISODateWithMs,对应于yyyy-MM-ddTHH:mm:ss.zzz[Z|±HH:mm]。

如果格式为Qt::RFC2822Date,则按照RFC 2822进行格式化。

如果日期时间无效,将返回空字符串。

警告:格式Qt::ISODate仅适用于0到9999年的范围。

另请参阅fromString(),QDate::toString(),QTime::toString(),以及QLocale::toString()。

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

这是一个重载的函数。

QString QDateTime::toString(QStringView format) const

这是一个重载的函数。

QDateTime QDateTime::toTimeZone(const QTimeZone &timeZone) const

返回转换为指定timeZone的datetime的副本。

结果表示与该日期时间相同的时刻,且与该日期时间相等。

结果描述了timeZone时间表示下的时间点。例如

QDateTime local(QDateTime::currentDateTime());
QDateTime UTC(local.toTimeSpec(QTimeZone::UTC));
qDebug() << "Local time is:" << local;
qDebug() << "UTC time is:" << UTC;
qDebug() << "No difference between times represented:" << local.secsTo(UTC);

如果timeZone无效,则datetime将无效。否则返回的datetime的timeSpec()将与timeZone.timeSpec()匹配。

另请参阅timeRepresentation(时间表示),toLocalTime(转换为本地时间),toUTC(转换为UTC时间)和toOffsetFromUtc(转换为UTC偏移量)。

QDateTime QDateTime::toUTC() const

返回转换为UTC的datetime的副本。

结果表示与该日期时间相同的时刻,且与该日期时间相等。

示例

QDateTime local(QDateTime::currentDateTime());
QDateTime UTC(local.toUTC());
qDebug() << "Local time is:" << local;
qDebug() << "UTC time is:" << UTC;
qDebug() << "No difference between times:" << local.secsTo(UTC);

另请参阅toTimeZone(转换为时区),toLocalTime(转换为本地时间)和toOffsetFromUtc(转换为UTC偏移量)。

[since 6.4] QDateTime &QDateTime::operator+=(std::chrono::milliseconds duration)

通过添加给定的duration修改此datetime对象。如果duration为正,则更新后的对象会更晚;如果为负,则会更早。

如果此datetime无效,则此函数无效果。

返回对此datetime对象的引用。

此函数是在Qt 6.4中引入的。

另请参阅addMSecs(添加毫秒数)。

[noexcept] QDateTime &QDateTime::operator-(std::chrono::milliseconds duration)

通过减去给定的duration修改此datetime对象。如果duration为正,则更新后的对象会更早;如果为负,则会更晚。

如果此datetime无效,则此函数无效果。

返回对此datetime对象的引用。

此函数是在Qt 6.4中引入的。

另请参阅addMSecs(添加毫秒数)。

[noexcept] QDateTime &QDateTime::operator=(const QDateTime &other)

复制的 其他 日期时间到这个并且返回这个副本。

相关非成员

[自6.4起] QDateTime operator+(const QDateTime &dateTime, std::chrono::milliseconds duration)

[自6.4起] QDateTime operator+(std::chrono::milliseconds duration, const QDateTime &dateTime)

返回一个包含推迟 duration 毫秒后的日期时间 dateTimeQDateTime 对象(如果 duration 为负,则为更早的时间)。

如果 dateTime 无效,则返回无效的日期时间。

此函数是在Qt 6.4中引入的。

另请参阅addMSecs(添加毫秒数)。

[noexcept] bool operator!=(const QDateTime &lhs, const QDateTime &rhs)

如果 lhsrhs 不同,则返回 true;否则返回 false

使用不同时间表示的日期时间可能会有不同的UTC偏差。在这种情况下,即使它们的 date()time() 差异,如果该差异与UTC偏差的差异相匹配,它们也可能比较等效。如果它们的 date()time() 一样,则UTC偏差较大(较早)的日期时间较小(较晚)。因此,日期时间是弱有序的。

自5.14版以来,所有无效的日期时间都是等效的,并且小于所有有效的日期时间。

另请参阅 operator==()。

[自6.4起] std::chrono::milliseconds operator-(const QDateTime &lhs, const QDateTime &rhs)

返回 lhsrhs 之间的毫秒数。如果 lhs 早于 rhs,则结果为负。

如果任何日期时间无效,则返回 0。

此函数是在Qt 6.4中引入的。

另请参阅 序列化Qt数据类型

[自6.4起] QDateTime operator-(const QDateTime &dateTime, std::chrono::milliseconds duration)

返回一个包含比 dateTimeduration 毫秒的日期时间 QDateTime 对象(如果 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)

如果 lhsrhs 的时间早或相同,则返回 true;否则返回 false

使用不同时间表示的日期时间可能会有不同的UTC偏差。在这种情况下,即使它们的 date()time() 差异,如果该差异与UTC偏差的差异相匹配,它们也可能比较等效。如果它们的 date()time() 一样,则UTC偏差较大(较早)的日期时间较小(较晚)。因此,日期时间是弱有序的。

自5.14版以来,所有无效的日期时间都是等效的,并且小于所有有效的日期时间。

另请参阅 operator==()。

[noexcept] bool operator==(const QDateTime &lhs, const QDateTime &rhs)

如果 lhsrhs 表示相同的时间点,则返回 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)

如果 lhsrhs 的时间晚,则返回 true;否则返回 false

使用不同时间表示的日期时间可能会有不同的UTC偏差。在这种情况下,即使它们的 date()time() 差异,如果该差异与UTC偏差的差异相匹配,它们也可能比较等效。如果它们的 date()time() 一样,则UTC偏差较大(较早)的日期时间较小(较晚)。因此,日期时间是弱有序的。

自5.14版以来,所有无效的日期时间都是等效的,并且小于所有有效的日期时间。

另请参阅 operator==()。

[noexcept] bool operator>=(const QDateTime &lhs, const QDateTime &rhs)

如果 lhsrhs 的时间晚或相同,则返回 true;否则返回 false

使用不同时间表示的日期时间可能会有不同的UTC偏差。在这种情况下,即使它们的 date()time() 差异,如果该差异与UTC偏差的差异相匹配,它们也可能比较等效。如果它们的 date()time() 一样,则UTC偏差较大(较早)的日期时间较小(较晚)。因此,日期时间是弱有序的。

自5.14版以来,所有无效的日期时间都是等效的,并且小于所有有效的日期时间。

另请参阅 operator==()。

QDataStream &operator>>(QDataStream &in, QDateTime &dateTime)

从流 in 中读取一个日期时间到 dateTime

另请参阅 Qt数据类型的序列化

© 2024 Qt 公司有限公司。本文件中的文档贡献归各自所有者所有。本文件中的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 许可的。Qt 及其分别是芬兰和/或世界其他地区的商标,由 Qt 公司有限公司持有。所有其他商标均为其各自所有者的财产。