PySide6.QtCore.QDateTime

class QDateTime

QDateTime 类提供了日期和时间功能。更多

概要

方法

静态函数

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

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

QDateTime 可以描述相对于 本地时间UTC、指定的 UTC偏移量 或指定的 时区 的日期时间。这些时间表示中的每一种都可以封装在 QTimeZone 类的适当实例中。例如,“Europe/Berlin”时区将应用德国使用的夏令时规则。相比之下,与UTC的固定偏移量为+3600秒,表示比UTC提前一小时(通常以ISO标准符号“UTC+01:00”表示),没有夏令时的复杂性。当使用本地时间或指定时区时,会考虑时区转换(见 下文)。QDateTimetimeSpec() 将告诉您正在使用四种时间表示中的哪一种;其 timeRepresentation() 提供了该时间表示的完整描述,作为 QTimeZone

一个QDateTime对象通常通过在构造函数中明确给出日期和时间来创建,或者通过使用静态函数如currentDateTime()fromMSecsSinceEpoch()来创建。日期和时间可以通过setDate()setTime()来更改。也可以使用setMSecsSinceEpoch()函数来设置日期时间,该函数接受自1970年UTC开始以来的毫秒数。fromString()函数返回一个QDateTime,给定一个字符串和一个用于解释字符串中日期的日期格式。

currentDateTime() 返回一个 QDateTime,表示当前日期和时间,基于特定的时间表示方式,例如本地时间(默认)。currentDateTimeUtc() 返回一个 QDateTime,表示当前日期和时间,基于协调世界时(UTC);它等同于 QDateTime::currentDateTime(QTimeZone::UTC)

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

QDateTime 提供了一整套操作符来比较两个 QDateTime 对象,其中较小意味着较早,较大意味着较晚。

您可以使用addMSecs()来增加(或减少)给定毫秒数的时间,使用addSecs()来增加秒数,或使用addDays()来增加天数。同样,您可以使用addMonths()addYears()daysTo()函数返回两个日期时间之间的天数,secsTo()返回两个日期时间之间的秒数,msecsTo()返回两个日期时间之间的毫秒数。这些操作在适用时会考虑夏令时(DST)和其他时区转换。

使用toTimeZone()来以不同的时间表示方式重新表达一个日期时间。通过传递一个轻量级的QTimeZone,它代表本地时间、UTC或与UTC的固定偏移量,您可以将日期时间转换为使用相应的时间表示;或者您可以传递一个完整的时区(其timeSpec()Qt::TimeZone)来使用该时区。

备注

注意

QDateTime 不考虑闰秒。

注意

所有与字符串格式之间的转换都是使用C语言环境完成的。对于本地化转换,请参见QLocale

注意

在公历中没有公元0年。该年的日期被视为无效。年份-1是“公元前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固定偏移的时间)转换时,在任何时区中总是有一个明确的有效结果。然而,当将日期和时间组合成日期时间时,如果以本地时间或特定时区表示,名义结果可能会落在过渡期间,使其无效或模糊。可能出现这种情况的方法会带有一个resolve参数:如果请求的日期时间有效且明确,则始终忽略此参数。有关它允许您控制的选项,请参见TransitionResolution。在Qt 6.7之前,选择了相当于其LegacyBehavior的选项。

对于春季跳过的间隔,使用任一偏移量解释请求的时间都会产生一个实际时间,该时间在使用另一个偏移量时有效;因此,为resolve传递TransitionResolution::RelativeToBefore实际上会导致在转换之后的时间,如果转换没有发生,该时间将具有请求的表示。同样,为resolve传递TransitionResolution::RelativeToAfter会导致在转换之前的时间,如果转换发生得更早,该时间将具有请求的表示。

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()会调整日期,并且只有在否则会得到无效结果时才调整时间。在春季时间转换前一天对03:00应用addDays(1)会简单地在转换日得到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范围内的一些日期时间),如果可用,则使用systemTimeZone(),或者尽力进行估计。无论如何,使用的偏移信息取决于系统,可能不完整,或者对于过去的时间,历史上不准确。此外,对于未来的日期,本地时区的偏移量和夏令时规则可能会在该日期到来之前发生变化。

全天过渡

少数时区在移动国际日期变更线时跳过或重复了整个日子。对于这些情况,daysTo() 将不会意识到重复或间隔,只是简单地使用日历日期的差异;相比之下,msecsTo()secsTo() 知道真实的时间间隔。同样,addMSecs()addSecs() 直接对应于经过的时间,而 addDays()addMonths()addYears() 遵循名义日历,除了在遇到间隔或重复时需要解决由于重复或遗漏引起的歧义或无效性。

注意

在日历更改期间“丢失”的天数,例如从儒略历到格里高利历,不会影响QDateTime。尽管这两种日历以不同的方式描述日期,但更改前后的连续天数由连续的QDate实例描述,每个实例比前一个实例晚一天,如任一日历或其toJulianDay()值所描述的那样。相比之下,时区跳过或重复一天是在改变其对时间的描述,而不是日期,尽管它是以整整24小时的方式进行的。

UTC偏移量

从UTC的偏移量以格林威治以东的秒数来衡量。由特定日期和时间(例如某一天的中午)描述的时刻取决于使用的时间表示法。对于任何给定的日期和时间组合,UTC偏移量较高的描述较早的时刻,而偏移量较低的描述较晚的时刻。

UTC偏移量没有明确的大小限制,但在使用toString()fromString()方法时,由于这些方法使用±hh:mm格式,实际上将范围限制在±99小时59分钟,并且只能是整分钟。请注意,目前没有时区的偏移量超出±14小时的范围,并且所有已知的偏移量都是五分钟的倍数。历史上的时区范围更广,可能包括秒的偏移量;这些最后无法在字符串中准确表示。

另请参阅

QDate QTime QTimeZone

class TransitionResolution

此枚举用于解析落在Timezone transitions中的日期时间组合。

在构造一个以本地时间或具有夏令时的时区指定的日期时间时,或使用setDate()setTime()setTimeZone()进行修订时,给定的参数可能暗示一个在该时区中无意义或有两种意义的时间表示。这样的时间表示被描述为处于过渡状态。在这两种情况下,我们可以简单地返回一个无效的日期时间,以表明该操作定义不明确。在模糊的情况下,我们可以选择其中一种可能的时间。当没有意义时,我们可以选择其两侧可能被合理认为的时间。例如,当从较早的时间推进时,我们可以选择过渡后的时间,这实际上是所讨论的较早时间之后的指定时间量。此处指定的选项配置了如何执行此类选择。

常量

描述

QDateTime.TransitionResolution.Reject

将转换中的任何时间视为无效。要么它确实是无效的,要么它是模糊的。

QDateTime.TransitionResolution.RelativeToBefore

选择一个时间,就像从过渡前的时间向前步进一样。这使用过渡前有效的偏移量来解释请求的时间,并在必要时将结果转换为结果时间有效的偏移量。

QDateTime.TransitionResolution.RelativeToAfter

选择一个时间,就像从过渡后的时间向后步进一样。这使用过渡后生效的偏移量来解释请求的时间,并在必要时将结果转换为结果时间生效的偏移量。

QDateTime.TransitionResolution.PreferBefore

选择转换前的时间,

QDateTime.TransitionResolution.PreferAfter

选择过渡后的时间。

QDateTime.TransitionResolution.PreferStandard

选择转换的标准时间侧的时间。

QDateTime.TransitionResolution.PreferDaylightSaving

选择在过渡期间处于夏令时一侧的时间。

QDateTime.TransitionResolution.LegacyBehavior

RelativeToBefore 的别名,用作 TransitionResolution 参数的默认值,因为这最接近 Qt 6.7 之前的行为。

对于addDays()addMonths()addYears(),行为是(并且大部分情况下是)在添加正调整时使用RelativeToBefore,在添加负调整时使用RelativeToAfter

注意

在夏令时增加夏季与UTC的偏移量的时区(称为“正夏令时”),PreferStandard是RelativeToAfter的别名,PreferDaylightSaving是RelativeToBefore的别名。在夏令时机制是冬季减少与UTC的偏移量的时区(称为“负夏令时”),则相反适用,前提是操作系统报告日期时间是否处于夏令时或标准时间,这在大多数平台上都是如此。对于某些平台,即使对于TimeZone日期时间,转换时间也不可用,QTimeZone不得不假定与UTC偏移量较低的一侧为标准时间,实际上假设为正夏令时。

以下表格展示了在各种可能的情况下,QDateTime构造函数如何解析在本地时间在02:00和03:00之间发生转换时,请求02:30的情况。转换的两侧分别是名义标准时间LST和夏令时LDT。转换类型可能是跳过一小时或重复一小时。转换类型和参数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 LDT

LDT

重复

LST

相对于之前

02:30 LDT

LDT

重复

LST

相对于之后

02:30 LST

LDT

重复

LST

优先之前

02:30 LDT

LDT

重复

LST

优先在之后

02:30 LST

LDT

重复

LST

首选标准

02:30 LST

LDT

重复

LST

偏好夏令时

02:30 LDT

其次,关于负夏令时的情况,冬季使用LDT,夏季跳过一小时过渡到LST,然后在过渡回冬季时重复一小时:

LDT

跳过

LST

相对于之前

03:30 LST

LDT

跳过

LST

相对于之后

01:30 LDT

LDT

跳过

LST

优先之前

01:30 LDT

LDT

跳过

LST

优先之后

03:30 LST

LDT

跳过

LST

首选标准

03:30 LST

LDT

跳过

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编程语言的datetime API有一个fold参数,它对应于RelativeToBeforefold = True)和RelativeToAfterfold = False)。

用于替换JavaScript的DateTemporal提案提供了四种解决过渡的选项,作为disambiguation参数的值。其'reject'选项会引发异常,大致对应于Reject产生无效结果。其'earlier''later'选项分别对应于PreferBeforePreferAfter。其'compatible'选项对应于RelativeToBefore(以及Python的fold = True)。

另请参阅

Timezone transitions TransitionResolution

在版本6.7中添加。

class YearRange

此枚举类型描述了QDateTime 可表示的年份范围(在公历中):

常量

描述

QDateTime.YearRange.First

今年的后期部分是可表示的

QDateTime.YearRange.Last

今年的较早部分是可表示的

这两个年份之间的所有日期也都可以表示。但请注意,格里高利历没有零年。

注意

QDate 可以描述更广泛年份的日期。对于大多数用途来说,这几乎没有区别,因为 QDateTime 可以支持的年份范围在1970年的两侧达到了2.92亿年。

另请参阅

isValid() QDate

__init__()

构造一个名义上使用本地时间的空日期时间。

空日期时间无效,因为其日期和时间无效。

__init__(other)
Parameters:

其他QDateTime

构造一个other日期时间的副本。

__init__(date, time[, resolve=QDateTime.TransitionResolution.LegacyBehavior])
Parameters:

这是一个重载函数。

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

如果date有效而time无效,将使用午夜作为时间。如果datetime描述的时刻接近本地时间的转换,resolve控制这种情况的解决方式。

注意

在 Qt 6.7 之前,此函数的版本缺少 resolve 参数,因此无法解决与过渡相关的歧义。

__init__(date, time, spec[, offsetSeconds=0])
Parameters:

注意

此函数已弃用。

使用 QDateTime(date, time)QDateTime(date, time, QTimeZone::fromSecondsAheadOfUtc(offsetSeconds))

使用给定的datetime构造一个日期时间,使用specoffsetSeconds秒所暗示的时间表示。

如果date有效而time无效,时间将被设置为午夜。

如果 spec 不是 OffsetFromUTC,那么 offsetSeconds 将被忽略。如果 specOffsetFromUTC 并且 offsetSeconds 为 0,那么 timeSpec() 将被设置为 UTC,即偏移量为 0 秒。

如果 specTimeZone,那么 spec 将被设置为 LocalTime,即当前系统时区。要创建一个 TimeZone 日期时间,请使用正确的构造函数。

如果 date 超出了 QDateTime 可表示的日期范围,则结果无效。如果 specLocalTime 并且系统的时区跳过了给定的日期和时间,则结果无效。

__init__(date, time, timeZone[, resolve=QDateTime.TransitionResolution.LegacyBehavior])
Parameters:

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

如果date有效而time无效,时间将被设置为午夜。如果timeZone无效,则日期时间将无效。如果datetime描述的时刻接近timeZone的转换,resolve控制如何解决这种情况。

注意

在 Qt 6.7 之前,此函数的版本缺少 resolve 参数,因此无法解决与过渡相关的歧义。

__init__(year, month, day, h, m, s)
Parameters:
  • year – int

  • month – 整数

  • day – 整数

  • h – 整数

  • m – 整数

  • s – 整数

__init__(year, month, day, h, m, s, ms[, spec=Qt.LocalTime])
Parameters:
  • year – int

  • month – 整数

  • day – 整数

  • h – 整数

  • m – 整数

  • s – 整数

  • ms – int

  • specTimeSpec

__init__(year, month, day, h, m, s, ms[, spec=Qt.LocalTime])
Parameters:
  • year – int

  • month – 整数

  • day – 整数

  • h – 整数

  • m – 整数

  • s – 整数

  • ms – int

  • spec – int

__reduce__()
Return type:

字符串

__repr__()
Return type:

字符串

addDays(days)
Parameters:

天数 – int

Return type:

QDateTime

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

如果timeSpec()LocalTimeTimeZone,并且生成的日期和时间落在标准时间到夏令时的转换小时,则结果将刚好超过这个间隙,朝着变化的方向。如果转换发生在凌晨2点,时钟向前跳到凌晨3点,那么瞄准凌晨2点到3点之间的结果将被调整为落在凌晨2点之前(如果ndays < 0)或凌晨3点之后(否则)。

另请参阅

daysTo() addMonths() addYears() addSecs() Timezone transitions

addMSecs(msecs)
Parameters:

msecs – 整数

Return type:

QDateTime

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

如果此日期时间无效,将返回无效的日期时间。

addMonths(months)
Parameters:

月份 – int

Return type:

QDateTime

返回一个包含比此对象的日期时间晚nmonths个月的日期时间的QDateTime对象(如果nmonths为负数,则返回更早的日期时间)。

如果timeSpec()LocalTimeTimeZone,并且生成的日期和时间落在标准时间到夏令时的转换小时,则结果将刚好超过这个间隙,朝着变化的方向。如果转换发生在凌晨2点,时钟向前跳到凌晨3点,那么瞄准凌晨2点到3点之间的结果将被调整为落在凌晨2点之前(如果nmonths < 0)或凌晨3点之后(否则)。

另请参阅

daysTo() addDays() addYears() addSecs() Timezone transitions

addSecs(secs)
Parameters:

秒数 – 整数

Return type:

QDateTime

返回一个QDateTime对象,该对象包含一个比此对象的日期时间晚s秒的日期时间(如果s为负数,则更早)。

如果此日期时间无效,将返回无效的日期时间。

addYears(years)
Parameters:

年份 – int

Return type:

QDateTime

返回一个包含比该对象日期时间晚nyears年的QDateTime对象(如果nyears为负数,则返回更早的日期时间)。

如果timeSpec()LocalTimeTimeZone,并且生成的日期和时间落在标准时间到夏令时的转换小时内,则结果将刚好超过这个间隙,朝着变化的方向。如果转换发生在凌晨2点,时钟向前跳到凌晨3点,那么瞄准凌晨2点到3点之间的结果将被调整为落在凌晨2点之前(如果nyears < 0)或凌晨3点之后(否则)。

另请参阅

daysTo() addDays() addMonths() addSecs() Timezone transitions

static currentDateTime()
Return type:

QDateTime

这是一个重载函数。

static currentDateTime(zone)
Parameters:

区域QTimeZone

Return type:

QDateTime

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

static currentDateTimeUtc()
Return type:

QDateTime

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

等同于 currentDateTime(QTimeZone::UTC)

static currentMSecsSinceEpoch()
Return type:

整数

返回自1970年UTC时间开始以来的当前毫秒数。

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

static currentSecsSinceEpoch()
Return type:

整数

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

这个数字类似于POSIX的time_t变量。

date()
Return type:

QDate

返回日期时间中的日期部分。

daysTo(other)
Parameters:

其他QDateTime

Return type:

整数

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回从当前日期时间到other日期时间的天数。天数的计算是从当前日期时间到other日期时间之间午夜到达的次数。这意味着从23:55到第二天的0:05的10分钟差异算作一天。

如果 other 日期时间早于此日期时间,则返回的值为负数。

示例:

startDate = QDateTime(QDate(2012, 7, 6), QTime(8, 30, 0))
endDate = QDateTime(QDate(2012, 7, 7), QTime(16, 30, 0))
print("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))
print("Days from startDate to endDate: ", startDate.daysTo(endDate))
qSwap(startDate, endDate) # Make endDate before startDate.
print("Days from startDate to endDate: ", startDate.daysTo(endDate))
static fromMSecsSinceEpoch(msecs)
Parameters:

msecs – 整数

Return type:

QDateTime

这是一个重载函数。

static fromMSecsSinceEpoch(msecs, timeZone)
Parameters:
Return type:

QDateTime

返回一个表示从1970年UTC时间开始,经过给定毫秒数msecs后的时刻的日期时间,该时刻由timeZone指定。默认的时间表示是本地时间。

请注意,msecs 可能存在超出 QDateTime 有效范围的值,包括负值和正值。对于这些值,此函数的行为是未定义的。

static fromMSecsSinceEpoch(msecs, spec[, offsetFromUtc=0])
Parameters:
  • msecs – 整数

  • specTimeSpec

  • offsetFromUtc – int

Return type:

QDateTime

注意

此函数已弃用。

这是一个重载函数。

传递一个QTimeZone代替,或者省略specoffsetSeconds

返回一个表示从1970年UTC时间开始,经过给定毫秒数msecs后的时刻的日期时间,该时刻由specoffsetSeconds指定。

请注意,msecs 可能存在超出 QDateTime 有效范围的值,包括负值和正值。对于这些值,此函数的行为是未定义的。

如果spec不是OffsetFromUTC,那么offsetSeconds将被忽略。如果specOffsetFromUTC并且offsetSeconds为0,那么UTC将被用作spec,因为UTC的偏移量为零。

如果 specTimeZone,那么 LocalTime 将替代使用,相当于使用当前系统时区(但表示方式不同)。

static fromSecsSinceEpoch(secs)
Parameters:

秒数 – 整数

Return type:

QDateTime

这是一个重载函数。

static fromSecsSinceEpoch(secs, timeZone)
Parameters:
Return type:

QDateTime

返回一个表示从1970年UTC时间开始,经过给定秒数secs后的时刻的日期时间,该时刻由timeZone指定。默认的时间表示是本地时间。

请注意,secs 可能存在超出 QDateTime 有效范围的值,包括负值和正值。对于这些值,此函数的行为是未定义的。

static fromSecsSinceEpoch(secs, spec[, offsetFromUtc=0])
Parameters:
  • secs – 整数

  • specTimeSpec

  • offsetFromUtc – int

Return type:

QDateTime

注意

此函数已弃用。

这是一个重载函数。

传递一个QTimeZone代替,或者省略specoffsetSeconds

返回一个表示从1970年UTC时间开始,经过给定秒数secs后的时刻的日期时间,该时刻由specoffsetSeconds指定。

请注意,secs 可能存在超出 QDateTime 有效范围的值,包括负值和正值。对于这些值,此函数的行为是未定义的。

如果spec不是OffsetFromUTC,那么offsetSeconds将被忽略。如果specOffsetFromUTC并且offsetSeconds为0,那么UTC将被用作spec,因为UTC的偏移量为零。

如果 specTimeZone,那么 LocalTime 将代替它使用,相当于使用当前系统时区(但表示方式不同)。

static fromString(string[, format=Qt.TextDate])
Parameters:
Return type:

QDateTime

这是一个重载函数。

static fromString(string[, format=Qt.TextDate])
Parameters:
Return type:

QDateTime

返回由string表示的QDateTime,使用给定的format,如果不可能则返回无效的日期时间。

注意:对于TextDate,仅识别英文的短月份名称(例如“Jan”为短格式或“January”为长格式)。

另请参阅

toString() toDateTime()

static fromString(string, format, cal)
Parameters:
  • 字符串 – str

  • format – str

  • calQCalendar

Return type:

QDateTime

这是一个重载函数。

static fromString(string, format[, baseYear=QLocale.DefaultTwoDigitBaseYear])
Parameters:
  • 字符串 – str

  • format – str

  • baseYear – int

Return type:

QDateTime

这是一个重载函数。

使用默认构造的QCalendar

static fromString(string, format, cal)
Parameters:
  • 字符串 – str

  • format – str

  • calQCalendar

Return type:

QDateTime

这是一个重载函数。

static fromString(string, format[, baseYear=QLocale.DefaultTwoDigitBaseYear])
Parameters:
  • 字符串 – str

  • format – str

  • baseYear – int

Return type:

QDateTime

这是一个重载函数。

使用默认构造的QCalendar

static fromString(string, format, cal)
Parameters:
  • 字符串 – str

  • format – str

  • calQCalendar

Return type:

QDateTime

这是一个重载函数。

static fromString(string, format[, baseYear=QLocale.DefaultTwoDigitBaseYear])
Parameters:
  • 字符串 – str

  • format – str

  • baseYear – int

Return type:

QDateTime

这是一个重载函数。

使用默认构造的QCalendar

static fromString(string, format, baseYear, cal)
Parameters:
  • 字符串 – str

  • format – str

  • baseYear – int

  • calQCalendar

Return type:

QDateTime

这是一个重载函数。

static fromString(string, format, baseYear, cal)
Parameters:
  • 字符串 – str

  • format – str

  • baseYear – int

  • calQCalendar

Return type:

QDateTime

这是一个重载函数。

static fromString(string, format, baseYear, cal)
Parameters:
  • 字符串 – str

  • format – str

  • baseYear – int

  • calQCalendar

Return type:

QDateTime

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

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

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

format仅指定年份的最后两位数字时,首先考虑的是从baseYear开始的100年。在6.7版本之前,没有baseYear参数,总是使用1900年。这是baseYear的默认值,从那时到1999年之间选择一个年份。在某些情况下,其他字段可能会导致选择下一个或上一个世纪,以获得与所有给定字段一致的结果。详情请参见fromString()

除了在格式字符串中识别的表达式,用于表示日期和时间的部分,通过fromString()fromString(),此方法还支持:

表达式

输出

t

时区(偏移量、名称、“Z”或带有“UTC”前缀的偏移量)

tt

时区偏移格式,小时和分钟之间没有冒号(例如“+0200”)

ttt

时区偏移格式,小时和分钟之间用冒号分隔(例如“+02:00”)

tttt

时区名称(例如“欧洲/柏林”)。识别的名称是QTimeZone所知的名称,这可能取决于所使用的操作系统。

如果没有‘t’格式说明符,则使用系统的本地时区。有关所有其他字段的默认值,请参见fromString()fromString()

例如:

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.

所有其他输入字符将被视为文本。任何用单引号括起来的非空字符序列也将被视为文本(去掉引号),而不会被解释为表达式。

time1 = QTime.fromString("131", "HHh")
# time1 is 13:00:00
time1 = QTime.fromString("1apA", "1amAM")
# time1 is 01:00:00
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是三位数字)。

dateTime = QDateTime.fromString("130", "Mm") # invalid()

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

错误指定的string字段将导致返回无效的QDateTime。仅支持本地时间从100年开始到9999年结束的日期时间。请注意,根据本地时区,其他时区(特别是包括UTC)接近此范围末尾的日期时间可能超出范围(因此被视为无效)。

注意

日和月的名称以及AM/PM指示符必须用英语(C语言环境)给出。如果要识别本地化的月份和日期名称或本地化的AM/PM形式,请使用system().toDateTime()。

注意

如果格式字符重复的次数超过了上表中使用它的最长表达式,这部分格式将被读取为多个表达式,它们之间没有分隔符;最长的表达式可能会重复多次,最后可能以一个较短的表达式作为剩余部分。因此,'tttttt' 将匹配 "Europe/BerlinEurope/Berlin" 并将时区设置为柏林时间;如果日期时间字符串包含“Europe/BerlinZ”,它将“匹配”但会产生不一致的结果,导致无效的日期时间。

isDaylightTime()
Return type:

布尔

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

如果 TimeSpec 不是 LocalTimeTimeZone,那么将始终返回 false。

另请参阅

timeSpec()

isNull()
Return type:

布尔

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

另请参阅

isNull() isNull() isValid()

isValid()
Return type:

布尔

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

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

msecsTo(other)
Parameters:

其他QDateTime

Return type:

整数

返回从当前日期时间到other日期时间的毫秒数。如果other日期时间早于当前日期时间,则返回的值为负数。

在进行比较之前,两个日期时间被转换为UTC,以确保如果夏令时(DST)适用于其中一个日期时间而不适用于另一个时,结果是正确的。

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

offsetFromUtc()
Return type:

整数

返回此日期时间与UTC的偏移量,单位为秒。

结果取决于 timeSpec() :

  • Qt::UTC 偏移量为0。

  • Qt::OffsetFromUTC 偏移量是原始设置的值。

  • Qt::LocalTime 返回本地时间与UTC的偏移量。

  • Qt::TimeZone 返回时区使用的偏移量。

对于最后两个,将返回该日期和时间的偏移量,考虑到夏令时偏移。偏移量是本地时间或给定时区时间与UTC时间之间的差异;对于UTC之前(东经)的时区,它是正的,对于UTC之后(西经)的时区,它是负的。

另请参阅

setOffsetFromUtc()

__ne__(rhs)
Parameters:

rhsQDateTime

Return type:

布尔

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

使用不同时间表示的两个日期时间可能具有不同的UTC偏移量。在这种情况下,即使它们的date()time()不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()time()一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱有序的。

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

另请参阅

operator==()

__lt__(rhs)
Parameters:

rhsQDateTime

Return type:

布尔

如果 lhs 早于 rhs,则返回 true;否则返回 false

使用不同时间表示的两个日期时间可能具有不同的UTC偏移量。在这种情况下,即使它们的date()time()不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()time()一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱序的。

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

另请参阅

operator==()

__le__(rhs)
Parameters:

rhsQDateTime

Return type:

布尔

如果 lhs 早于或等于 rhs,则返回 true;否则返回 false

使用不同时间表示法的两个日期时间可能会有不同的UTC偏移量。在这种情况下,即使它们的date()time()不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()time()一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱有序的。

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

另请参阅

operator==()

__eq__(rhs)
Parameters:

rhsQDateTime

Return type:

布尔

如果 lhs 表示的时间与 rhs 相同,则返回 true;否则返回 false

使用不同时间表示的两个日期时间可能具有不同的UTC偏移量。在这种情况下,即使它们的date()time()不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()time()一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱有序的。

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

另请参阅

operator!=() operator operator operator>() operator>=()

__gt__(rhs)
Parameters:

rhsQDateTime

Return type:

布尔

如果 lhs 晚于 rhs,则返回 true;否则返回 false

使用不同时间表示的两个日期时间可能具有不同的UTC偏移量。在这种情况下,即使它们的date()time()不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()time()一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱有序的。

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

另请参阅

operator==()

__ge__(rhs)
Parameters:

rhsQDateTime

Return type:

布尔

如果 lhs 晚于或等于 rhs,则返回 true;否则返回 false

使用不同时间表示的两个日期时间可能具有不同的UTC偏移量。在这种情况下,即使它们的date()time()不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()time()一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱有序的。

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

另请参阅

operator==()

secsTo(other)
Parameters:

其他QDateTime

Return type:

整数

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回从当前日期时间到other日期时间的秒数。如果other日期时间早于当前日期时间,则返回的值为负数。

在进行比较之前,两个日期时间被转换为UTC,以确保如果夏令时(DST)适用于其中一个日期时间而不适用于另一个时,结果是正确的。

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

示例:

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

另请参阅

addSecs() daysTo() secsTo()

setDate(date[, resolve=QDateTime.TransitionResolution.LegacyBehavior])
Parameters:

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

如果尚未设置时间,则设置为午夜。如果date无效,则此QDateTime变为无效。

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

注意

在 Qt 6.7 之前,此函数的版本缺少 resolve 参数,因此无法解决与过渡相关的歧义。

setMSecsSinceEpoch(msecs)
Parameters:

msecs – 整数

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

在不支持时区的系统上,此函数的行为将如同本地时间是UTC

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

setOffsetFromUtc(offsetSeconds)
Parameters:

offsetSeconds – int

注意

此函数已弃用。

使用 setTimeZone ( fromSecondsAheadOfUtc (offsetSeconds)) 代替

timeSpec()设置为OffsetFromUTC,并将偏移量设置为offsetSeconds。该日期时间可能指的是不同的时间点。

最大和最小偏移量为正负14小时。如果offsetSeconds大于或小于该值,则结果未定义。

如果 offsetSeconds 为 0,则 timeSpec() 将被设置为 UTC

setSecsSinceEpoch(secs)
Parameters:

秒数 – 整数

设置日期时间以表示自1970年UTC时间开始后的给定秒数secs的时刻。

在不支持时区的系统上,此函数的行为将如同本地时间是UTC

setTime(time[, resolve=QDateTime.TransitionResolution.LegacyBehavior])
Parameters:

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

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

如果date()time描述的时刻接近此日期时间表示形式的转换点,resolve控制如何处理这种情况。

注意

在 Qt 6.7 之前,此函数的版本缺少 resolve 参数,因此无法解决与过渡相关的歧义。

setTimeSpec(spec)
Parameters:

规格TimeSpec

注意

此函数已弃用。

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

请使用 setTimeZone() 代替

设置此日期时间中使用的时间规范为spec。日期时间可能指的是不同的时间点。

如果 specOffsetFromUTC,那么 timeSpec() 将被设置为 UTC,即有效偏移量为0。

如果 specTimeZone,那么 spec 将被设置为 LocalTime,即当前系统时区。

示例:

local = QDateTime(QDateTime.currentDateTime())
print("Local time is:", local)
UTC = QDateTime(local)
UTC.setTimeSpec(Qt.UTC)
print("UTC time is:", UTC)
print("There are", local.secsTo(UTC), "seconds difference between the datetimes.")
setTimeZone(toZone[, resolve=QDateTime.TransitionResolution.LegacyBehavior])
Parameters:

将用于此日期时间的时间区域设置为 toZone

日期时间可能指的是不同的时间点。它使用了toZone的时间表示,这可能会改变其未更改的date()time()的含义。

如果 toZone 无效,则日期时间将无效。否则,调用后此日期时间的 timeSpec() 将与 toZone.timeSpec() 匹配。

如果 date()time() 描述的时刻接近 toZone 的转换,resolve 控制这种情况的解决方式。

注意

在 Qt 6.7 之前,此函数的版本缺少 resolve 参数,因此无法解决与过渡相关的歧义。

swap(other)
Parameters:

其他QDateTime

将此日期时间与 other 交换。此操作非常快速且永远不会失败。

time()
Return type:

QTime

返回日期时间的时间部分。

timeRepresentation()
Return type:

QTimeZone

返回一个QTimeZone,标识此日期时间如何表示时间。

返回的QTimeZonetimeSpec()将与这个日期时间的一致;如果它不是TimeZone,则返回的QTimeZone是一个时间表示。当它们的timeSpec()OffsetFromUTC时,返回的QTimeZone的fixedSecondsAheadOfUtc()提供偏移量。当timeSpec()TimeZone时,QTimeZone对象本身是该时区的完整表示。

timeSpec()
Return type:

TimeSpec

返回日期时间的时间规范。

这将其时间表示分类为本地时间、UTC、与UTC的固定偏移(不指示偏移量)或时区(不提供该时区的详细信息)。等同于timeRepresentation().timeSpec()

timeZone()
Return type:

QTimeZone

返回日期时间所在的时区。

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

timeSpec()LocalTime时,结果将描述调用此方法时的本地时间。即使从中获取的QDateTime反映了系统时区的后续更改,它也不会反映这些更改。

timeZoneAbbreviation()
Return type:

字符串

返回此日期时间的时区缩写。

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

注意

缩写不保证是唯一的,即不同的时区可能具有相同的缩写。对于LocalTimeTimeZone,当由主机系统返回时,缩写可能是本地化的。

另请参阅

timeSpec() abbreviation()

toLocalTime()
Return type:

QDateTime

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回此日期时间转换为本地时间的副本。

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

示例:

UTC = QDateTime(QDateTime.currentDateTimeUtc())
local = QDateTime(UTC.toLocalTime())
print("UTC time is:", UTC)
print("Local time is:", local)
print("No difference between times:", UTC.secsTo(local))
toMSecsSinceEpoch()
Return type:

整数

返回自1970年1月1日UTC时间开始的毫秒数表示的日期时间。

在不支持时区的系统上,此函数的行为将如同本地时间是UTC

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

toOffsetFromUtc(offsetSeconds)
Parameters:

offsetSeconds – int

Return type:

QDateTime

返回将此日期时间转换为具有给定offsetSecondsOffsetFromUTC规范的副本。等同于toTimeZone(QTimeZone::fromSecondsAheadOfUtc(offsetSeconds))

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

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

toPython()
Return type:

对象

toSecsSinceEpoch()
Return type:

整数

返回自1970年1月1日UTC时间开始的秒数表示的日期时间。

在不支持时区的系统上,此函数的行为将如同本地时间是UTC

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

toString(format)
Parameters:

format – str

Return type:

字符串

这是一个重载函数。

toString([format=Qt.TextDate])
Parameters:

formatDateFormat

Return type:

字符串

这是一个重载函数。

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

如果formatTextDate,字符串将以默认方式格式化。日期和月份名称将以英文显示。这种格式化的一个例子是“Wed May 20 03:40:13 1998”。对于本地化格式化,请参见toString()

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

如果formatRFC2822Date,则字符串将按照RFC 2822进行格式化。

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

警告

ISODate 格式仅对0到9999年范围内的年份有效。

toString(format)
Parameters:

format – str

Return type:

字符串

这是一个重载函数。

toString(format, cal)
Parameters:
Return type:

字符串

toString(format, cal)
Parameters:
Return type:

字符串

toTimeSpec(spec)
Parameters:

规格TimeSpec

Return type:

QDateTime

注意

此函数已弃用。

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

请使用toTimeZone()代替。

返回此日期时间转换为给定时间spec的副本。

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

如果 specOffsetFromUTC,则它被设置为 UTC。要设置为与UTC的固定偏移量,请使用 toTimeZone()toOffsetFromUtc()

如果 specTimeZone,那么它将被设置为 LocalTime,即本地时区。要设置指定的时区,请使用 toTimeZone()

示例:

local = QDateTime(QDateTime.currentDateTime())
UTC = QDateTime(local.toTimeSpec(Qt.UTC))
print("Local time is:", local)
print("UTC time is:", UTC)
print("No difference between times:", local.secsTo(UTC))
toTimeZone(toZone)
Parameters:

toZoneQTimeZone

Return type:

QDateTime

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回此日期时间转换为给定timeZone的副本。

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

结果描述了以timeZone的时间表示法表示的时间点。例如:

local = QDateTime(QDateTime.currentDateTime())
UTC = QDateTime(local.toTimeSpec(QTimeZone.UTC))
print("Local time is:", local)
print("UTC time is:", UTC)
print("No difference between times represented:", local.secsTo(UTC))

如果timeZone无效,则日期时间将无效。否则返回的日期时间的timeSpec()将匹配timeZone.timeSpec()

toUTC()
Return type:

QDateTime

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回此日期时间转换为UTC的副本。

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

示例:

local = QDateTime(QDateTime.currentDateTime())
UTC = QDateTime(local.toUTC())
print("Local time is:", local)
print("UTC time is:", UTC)
print("No difference between times:", local.secsTo(UTC))