PySide6.QtCore.QDateTime¶
- class QDateTime¶
-
概要¶
方法¶
def
__init__()
def
__reduce__()
def
__repr__()
def
addDays()
def
addMSecs()
def
addMonths()
def
addSecs()
def
addYears()
def
date()
def
daysTo()
def
isDaylightTime()
def
isNull()
def
isValid()
def
msecsTo()
def
offsetFromUtc()
def
__ne__()
def
__lt__()
def
__le__()
def
__eq__()
def
__gt__()
def
__ge__()
def
secsTo()
def
setDate()
def
setTime()
def
setTimeSpec()
def
setTimeZone()
def
swap()
def
time()
def
timeSpec()
def
timeZone()
def
toLocalTime()
def
toPython()
def
toString()
def
toTimeSpec()
def
toTimeZone()
def
toUTC()
静态函数¶
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
一个
QDateTime
对象根据时间表示法编码一个日历日期和时钟时间(“日期时间”)。它结合了QDate
和QTime
类的特性。它可以从系统时钟读取当前日期时间。它提供了比较日期时间以及通过添加秒数、天数、月数或年数来操作日期时间的函数。QDateTime
可以描述相对于本地时间
、UTC
、指定的UTC偏移量
或指定的时区
的日期时间。这些时间表示中的每一种都可以封装在QTimeZone
类的适当实例中。例如,“Europe/Berlin”时区将应用德国使用的夏令时规则。相比之下,与UTC的固定偏移量为+3600秒,表示比UTC提前一小时(通常以ISO标准符号“UTC+01:00”表示),没有夏令时的复杂性。当使用本地时间或指定时区时,会考虑时区转换(见下文
)。QDateTime
的timeSpec()
将告诉您正在使用四种时间表示中的哪一种;其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()
遵循名义日历,除了在遇到间隔或重复时需要解决由于重复或遗漏引起的歧义或无效性。UTC偏移量¶
从UTC的偏移量以格林威治以东的秒数来衡量。由特定日期和时间(例如某一天的中午)描述的时刻取决于使用的时间表示法。对于任何给定的日期和时间组合,UTC偏移量较高的描述较早的时刻,而偏移量较低的描述较晚的时刻。
UTC偏移量没有明确的大小限制,但在使用
toString()
和fromString()
方法时,由于这些方法使用±hh:mm格式,实际上将范围限制在±99小时59分钟,并且只能是整分钟。请注意,目前没有时区的偏移量超出±14小时的范围,并且所有已知的偏移量都是五分钟的倍数。历史上的时区范围更广,可能包括秒的偏移量;这些最后无法在字符串中准确表示。- 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
参数,它对应于RelativeToBefore
(fold = True
)和RelativeToAfter
(fold = False
)。用于替换JavaScript的
Date
的Temporal
提案提供了四种解决过渡的选项,作为disambiguation
参数的值。其'reject'
选项会引发异常,大致对应于Reject
产生无效结果。其'earlier'
和'later'
选项分别对应于PreferBefore
和PreferAfter
。其'compatible'
选项对应于RelativeToBefore
(以及Python的fold = True
)。另请参阅
Timezone transitions
TransitionResolution
在版本6.7中添加。
- class YearRange¶
此枚举类型描述了
QDateTime
可表示的年份范围(在公历中):常量
描述
QDateTime.YearRange.First
今年的后期部分是可表示的
QDateTime.YearRange.Last
今年的较早部分是可表示的
这两个年份之间的所有日期也都可以表示。但请注意,格里高利历没有零年。
- __init__()¶
构造一个名义上使用本地时间的空日期时间。
空日期时间无效,因为其日期和时间无效。
- __init__(other)
- Parameters:
其他 –
QDateTime
构造一个
other
日期时间的副本。- __init__(date, time[, resolve=QDateTime.TransitionResolution.LegacyBehavior])
- Parameters:
日期 –
QDate
时间 –
QTime
resolve –
TransitionResolution
这是一个重载函数。
使用本地时间,用给定的
date
和time
构造一个日期时间。如果
date
有效而time
无效,将使用午夜作为时间。如果date
和time
描述的时刻接近本地时间的转换,resolve
控制这种情况的解决方式。注意
在 Qt 6.7 之前,此函数的版本缺少
resolve
参数,因此无法解决与过渡相关的歧义。- __init__(date, time, spec[, offsetSeconds=0])
-
注意
此函数已弃用。
使用
QDateTime(date, time)
或QDateTime(date, time, QTimeZone::fromSecondsAheadOfUtc(offsetSeconds))
。使用给定的
date
和time
构造一个日期时间,使用spec
和offsetSeconds
秒所暗示的时间表示。如果
date
有效而time
无效,时间将被设置为午夜。如果
spec
不是OffsetFromUTC
,那么offsetSeconds
将被忽略。如果spec
是OffsetFromUTC
并且offsetSeconds
为 0,那么timeSpec()
将被设置为UTC
,即偏移量为 0 秒。如果
spec
是TimeZone
,那么 spec 将被设置为LocalTime
,即当前系统时区。要创建一个TimeZone
日期时间,请使用正确的构造函数。如果
date
超出了QDateTime
可表示的日期范围,则结果无效。如果spec
是LocalTime
并且系统的时区跳过了给定的日期和时间,则结果无效。- __init__(date, time, timeZone[, resolve=QDateTime.TransitionResolution.LegacyBehavior])
- Parameters:
日期 –
QDate
时间 –
QTime
timeZone –
QTimeZone
resolve –
TransitionResolution
使用由
timeZone
描述的时间表示法,构造一个具有给定date
和time
的日期时间。如果
date
有效而time
无效,时间将被设置为午夜。如果timeZone
无效,则日期时间将无效。如果date
和time
描述的时刻接近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
spec –
TimeSpec
- __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:
字符串
返回一个包含比该对象日期时间晚
ndays
天的日期时间的QDateTime
对象(如果ndays
为负数,则返回更早的日期时间)。如果
timeSpec()
是LocalTime
或TimeZone
,并且生成的日期和时间落在标准时间到夏令时的转换小时,则结果将刚好超过这个间隙,朝着变化的方向。如果转换发生在凌晨2点,时钟向前跳到凌晨3点,那么瞄准凌晨2点到3点之间的结果将被调整为落在凌晨2点之前(如果ndays < 0
)或凌晨3点之后(否则)。另请参阅
daysTo()
addMonths()
addYears()
addSecs()
Timezone transitions
返回一个
QDateTime
对象,该对象包含一个比此对象的日期时间晚msecs
毫秒的日期时间(如果msecs
为负数,则更早)。如果此日期时间无效,将返回无效的日期时间。
返回一个包含比此对象的日期时间晚
nmonths
个月的日期时间的QDateTime
对象(如果nmonths
为负数,则返回更早的日期时间)。如果
timeSpec()
是LocalTime
或TimeZone
,并且生成的日期和时间落在标准时间到夏令时的转换小时,则结果将刚好超过这个间隙,朝着变化的方向。如果转换发生在凌晨2点,时钟向前跳到凌晨3点,那么瞄准凌晨2点到3点之间的结果将被调整为落在凌晨2点之前(如果nmonths < 0
)或凌晨3点之后(否则)。另请参阅
daysTo()
addDays()
addYears()
addSecs()
Timezone transitions
返回一个
QDateTime
对象,该对象包含一个比此对象的日期时间晚s
秒的日期时间(如果s
为负数,则更早)。如果此日期时间无效,将返回无效的日期时间。
返回一个包含比该对象日期时间晚
nyears
年的QDateTime
对象(如果nyears
为负数,则返回更早的日期时间)。如果
timeSpec()
是LocalTime
或TimeZone
,并且生成的日期和时间落在标准时间到夏令时的转换小时内,则结果将刚好超过这个间隙,朝着变化的方向。如果转换发生在凌晨2点,时钟向前跳到凌晨3点,那么瞄准凌晨2点到3点之间的结果将被调整为落在凌晨2点之前(如果nyears < 0
)或凌晨3点之后(否则)。另请参阅
daysTo()
addDays()
addMonths()
addSecs()
Timezone transitions
这是一个重载函数。
返回系统时钟的当前日期时间,使用由
zone
描述的时间表示。如果省略zone
,则使用本地时间。返回系统时钟的当前日期时间,以UTC表示。
等同于
currentDateTime(QTimeZone::UTC)
。- static currentMSecsSinceEpoch()¶
- Return type:
整数
返回自1970年UTC时间开始以来的当前毫秒数。
这个数字类似于POSIX的time_t变量,但以毫秒而不是秒表示。
- static currentSecsSinceEpoch()¶
- Return type:
整数
返回自1970年UTC时间开始以来的秒数。
这个数字类似于POSIX的time_t变量。
返回日期时间中的日期部分。
警告
本节包含从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, timeZone)
返回一个表示从1970年UTC时间开始,经过给定毫秒数
msecs
后的时刻的日期时间,该时刻由timeZone
指定。默认的时间表示是本地时间。请注意,
msecs
可能存在超出QDateTime
有效范围的值,包括负值和正值。对于这些值,此函数的行为是未定义的。- static fromMSecsSinceEpoch(msecs, spec[, offsetFromUtc=0])
-
注意
此函数已弃用。
这是一个重载函数。
传递一个
QTimeZone
代替,或者省略spec
和offsetSeconds
。返回一个表示从1970年UTC时间开始,经过给定毫秒数
msecs
后的时刻的日期时间,该时刻由spec
和offsetSeconds
指定。请注意,
msecs
可能存在超出QDateTime
有效范围的值,包括负值和正值。对于这些值,此函数的行为是未定义的。如果
spec
不是OffsetFromUTC
,那么offsetSeconds
将被忽略。如果spec
是OffsetFromUTC
并且offsetSeconds
为0,那么UTC
将被用作spec
,因为UTC的偏移量为零。如果
spec
是TimeZone
,那么LocalTime
将替代使用,相当于使用当前系统时区(但表示方式不同)。这是一个重载函数。
- static fromSecsSinceEpoch(secs, timeZone)
返回一个表示从1970年UTC时间开始,经过给定秒数
secs
后的时刻的日期时间,该时刻由timeZone
指定。默认的时间表示是本地时间。请注意,
secs
可能存在超出QDateTime
有效范围的值,包括负值和正值。对于这些值,此函数的行为是未定义的。- static fromSecsSinceEpoch(secs, spec[, offsetFromUtc=0])
-
注意
此函数已弃用。
这是一个重载函数。
传递一个
QTimeZone
代替,或者省略spec
和offsetSeconds
。返回一个表示从1970年UTC时间开始,经过给定秒数
secs
后的时刻的日期时间,该时刻由spec
和offsetSeconds
指定。请注意,
secs
可能存在超出QDateTime
有效范围的值,包括负值和正值。对于这些值,此函数的行为是未定义的。如果
spec
不是OffsetFromUTC
,那么offsetSeconds
将被忽略。如果spec
是OffsetFromUTC
并且offsetSeconds
为0,那么UTC
将被用作spec
,因为UTC的偏移量为零。如果
spec
是TimeZone
,那么LocalTime
将代替它使用,相当于使用当前系统时区(但表示方式不同)。- static fromString(string[, format=Qt.TextDate])¶
- Parameters:
字符串 – str
format –
DateFormat
- Return type:
这是一个重载函数。
- static fromString(string[, format=Qt.TextDate])
- Parameters:
字符串 – str
format –
DateFormat
- Return type:
返回由
string
表示的QDateTime
,使用给定的format
,如果不可能则返回无效的日期时间。注意:对于
TextDate
,仅识别英文的短月份名称(例如“Jan”为短格式或“January”为长格式)。另请参阅
- static fromString(string, format, cal)
这是一个重载函数。
- static fromString(string, format[, baseYear=QLocale.DefaultTwoDigitBaseYear])
- Parameters:
字符串 – str
format – str
baseYear – int
- Return type:
这是一个重载函数。
使用默认构造的
QCalendar
。- static fromString(string, format, cal)
这是一个重载函数。
- static fromString(string, format[, baseYear=QLocale.DefaultTwoDigitBaseYear])
- Parameters:
字符串 – str
format – str
baseYear – int
- Return type:
这是一个重载函数。
使用默认构造的
QCalendar
。- static fromString(string, format, cal)
这是一个重载函数。
- static fromString(string, format[, baseYear=QLocale.DefaultTwoDigitBaseYear])
- Parameters:
字符串 – str
format – str
baseYear – int
- Return type:
这是一个重载函数。
使用默认构造的
QCalendar
。- static fromString(string, format, baseYear, cal)
这是一个重载函数。
- static fromString(string, format, baseYear, cal)
这是一个重载函数。
- static fromString(string, format, baseYear, cal)
警告
本节包含从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
不是LocalTime
或TimeZone
,那么将始终返回 false。另请参阅
- isNull()¶
- Return type:
布尔
如果日期和时间都为null,则返回
true
;否则返回false
。null的日期时间是无效的。- isValid()¶
- Return type:
布尔
如果此日期时间表示一个确定的时刻,则返回
true
,否则返回false
。如果日期和时间都有效,并且使用的时间表示法为它们的组合提供了有效的含义,则日期时间是有效的。当时间表示法是特定时区或本地时间时,在某些日期上,时区可能会跳过其表示中的某些时间,例如在夏令时转换期间跳过一小时(通常在春季的夜晚)。例如,如果夏令时在凌晨2点结束,时钟前进到凌晨3点,那么当天从02:00:00到02:59:59.999的日期时间是无效的。
返回从当前日期时间到
other
日期时间的毫秒数。如果other
日期时间早于当前日期时间,则返回的值为负数。在进行比较之前,两个日期时间被转换为
UTC
,以确保如果夏令时(DST)适用于其中一个日期时间而不适用于另一个时,结果是正确的。如果任一日期时间无效,则返回0。
另请参阅
- offsetFromUtc()¶
- Return type:
整数
返回此日期时间与UTC的偏移量,单位为秒。
结果取决于
timeSpec()
:Qt::UTC
偏移量为0。Qt::OffsetFromUTC
偏移量是原始设置的值。Qt::LocalTime
返回本地时间与UTC的偏移量。Qt::TimeZone
返回时区使用的偏移量。
对于最后两个,将返回该日期和时间的偏移量,考虑到夏令时偏移。偏移量是本地时间或给定时区时间与UTC时间之间的差异;对于UTC之前(东经)的时区,它是正的,对于UTC之后(西经)的时区,它是负的。
另请参阅
如果
lhs
与rhs
不同,则返回true
;否则返回false
。使用不同时间表示的两个日期时间可能具有不同的UTC偏移量。在这种情况下,即使它们的
date()
和time()
不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()
和time()
一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱有序的。自5.14版本起,所有无效的日期时间都是等价的,并且小于所有有效的日期时间。
另请参阅
operator==()
如果
lhs
早于rhs
,则返回true
;否则返回false
。使用不同时间表示的两个日期时间可能具有不同的UTC偏移量。在这种情况下,即使它们的
date()
和time()
不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()
和time()
一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱序的。自5.14版本起,所有无效的日期时间都是等价的,并且小于所有有效的日期时间。
另请参阅
operator==()
如果
lhs
早于或等于rhs
,则返回true
;否则返回false
。使用不同时间表示法的两个日期时间可能会有不同的UTC偏移量。在这种情况下,即使它们的
date()
和time()
不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()
和time()
一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱有序的。自5.14版本起,所有无效的日期时间都是等价的,并且小于所有有效的日期时间。
另请参阅
operator==()
如果
lhs
表示的时间与rhs
相同,则返回true
;否则返回false
。使用不同时间表示的两个日期时间可能具有不同的UTC偏移量。在这种情况下,即使它们的
date()
和time()
不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()
和time()
一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱有序的。自5.14版本起,所有无效的日期时间都是等价的,并且小于所有有效的日期时间。
另请参阅
operator!=()
operator
operator
operator>()
operator>=()
如果
lhs
晚于rhs
,则返回true
;否则返回false
。使用不同时间表示的两个日期时间可能具有不同的UTC偏移量。在这种情况下,即使它们的
date()
和time()
不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()
和time()
一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱有序的。自5.14版本起,所有无效的日期时间都是等价的,并且小于所有有效的日期时间。
另请参阅
operator==()
如果
lhs
晚于或等于rhs
,则返回true
;否则返回false
。使用不同时间表示的两个日期时间可能具有不同的UTC偏移量。在这种情况下,即使它们的
date()
和time()
不同,如果这种差异与UTC偏移量的差异相匹配,它们可能会比较相等。如果它们的date()
和time()
一致,那么UTC偏移量较大的日期时间比偏移量较小的日期时间更小(更早)。因此,日期时间只是弱有序的。自5.14版本起,所有无效的日期时间都是等价的,并且小于所有有效的日期时间。
另请参阅
operator==()
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
返回从当前日期时间到
other
日期时间的秒数。如果other
日期时间早于当前日期时间,则返回的值为负数。在进行比较之前,两个日期时间被转换为
UTC
,以确保如果夏令时(DST)适用于其中一个日期时间而不适用于另一个时,结果是正确的。如果任一日期时间无效,则返回0。
示例:
- setDate(date[, resolve=QDateTime.TransitionResolution.LegacyBehavior])¶
- Parameters:
日期 –
QDate
resolve –
TransitionResolution
将此日期时间的日期部分设置为
date
。如果尚未设置时间,则设置为午夜。如果
date
无效,则此QDateTime
变为无效。如果
date
和time()
描述的时刻接近此日期时间表示的时间转换,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:
时间 –
QTime
resolve –
TransitionResolution
将此日期时间的时间部分设置为
time
。如果time
无效,此函数将其设置为午夜。因此,可以通过将其设置为默认的QTime
来清除QDateTime
中设置的任何时间:QDateTime dt = QDateTime::currentDateTime(); dt.setTime(QTime());
如果
date()
和time
描述的时刻接近此日期时间表示形式的转换点,resolve
控制如何处理这种情况。警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
请使用
setTimeZone()
代替设置此日期时间中使用的时间规范为
spec
。日期时间可能指的是不同的时间点。如果
spec
是OffsetFromUTC
,那么timeSpec()
将被设置为UTC
,即有效偏移量为0。如果
spec
是TimeZone
,那么 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 –
QTimeZone
resolve –
TransitionResolution
将用于此日期时间的时间区域设置为
toZone
。日期时间可能指的是不同的时间点。它使用了
toZone
的时间表示,这可能会改变其未更改的date()
和time()
的含义。如果
toZone
无效,则日期时间将无效。否则,调用后此日期时间的timeSpec()
将与toZone.timeSpec()
匹配。如果
date()
和time()
描述的时刻接近toZone
的转换,resolve
控制这种情况的解决方式。将此日期时间与
other
交换。此操作非常快速且永远不会失败。返回日期时间的时间部分。
返回一个
QTimeZone
,标识此日期时间如何表示时间。返回的
QTimeZone
的timeSpec()
将与这个日期时间的一致;如果它不是TimeZone
,则返回的QTimeZone
是一个时间表示。当它们的timeSpec()
是OffsetFromUTC
时,返回的QTimeZone
的fixedSecondsAheadOfUtc()提供偏移量。当timeSpec()
是TimeZone
时,QTimeZone
对象本身是该时区的完整表示。返回日期时间的时间规范。
这将其时间表示分类为本地时间、UTC、与UTC的固定偏移(不指示偏移量)或时区(不提供该时区的详细信息)。等同于
timeRepresentation().timeSpec()
。返回日期时间所在的时区。
结果与
timeRepresentation().asBackendZone()
相同。在所有情况下,结果的timeSpec()
是TimeZone
。当
timeSpec()
是LocalTime
时,结果将描述调用此方法时的本地时间。即使从中获取的QDateTime
反映了系统时区的后续更改,它也不会反映这些更改。- timeZoneAbbreviation()¶
- Return type:
字符串
返回此日期时间的时区缩写。
返回的字符串取决于
timeSpec()
:对于
UTC
,它是“UTC”。对于
OffsetFromUTC
,它将采用“UTC±00:00”格式。对于
LocalTime
,会查询主机系统。
警告
本节包含从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
。如果此对象中存储的日期时间无效,则此函数的行为是未定义的。然而,对于所有有效的日期,此函数返回一个唯一的值。
返回将此日期时间转换为具有给定
offsetSeconds
的OffsetFromUTC
规范的副本。等同于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:
format –
DateFormat
- Return type:
字符串
这是一个重载函数。
返回给定
format
格式的日期时间字符串。如果
format
是TextDate
,字符串将以默认方式格式化。日期和月份名称将以英文显示。这种格式化的一个例子是“Wed May 20 03:40:13 1998”。对于本地化格式化,请参见toString()
。如果
format
是ISODate
,字符串格式对应于ISO 8601扩展规范中的日期和时间表示,形式为yyyy-MM-ddTHH:mm:ss[Z|±HH:mm],具体取决于QDateTime
的timeSpec()
。如果timeSpec()
是UTC
,则字符串将附加Z;如果timeSpec()
是OffsetFromUTC
,则字符串将附加与UTC的小时和分钟偏移量。要在ISO 8601日期中包含毫秒,请使用format
ISODateWithMs
,其对应于yyyy-MM-ddTHH:mm:ss.zzz[Z|±HH:mm]。如果
format
是RFC2822Date
,则字符串将按照RFC 2822进行格式化。如果日期时间无效,将返回一个空字符串。
- toString(format)
- Parameters:
format – str
- Return type:
字符串
这是一个重载函数。
- toString(format, cal)
- Parameters:
format – str
cal –
QCalendar
- Return type:
字符串
- toString(format, cal)
- Parameters:
format – str
cal –
QCalendar
- Return type:
字符串
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
请使用
toTimeZone()
代替。返回此日期时间转换为给定时间
spec
的副本。结果表示与此日期时间相同的时刻,并且等于此日期时间。
如果
spec
是OffsetFromUTC
,则它被设置为UTC
。要设置为与UTC的固定偏移量,请使用toTimeZone()
或toOffsetFromUtc()
。如果
spec
是TimeZone
,那么它将被设置为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))
警告
本节包含从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()
。警告
本节包含从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))