- class QTimeZone#
-
概述#
方法#
def
__init__()
def
abbreviation()
def
asBackendZone()
def
comment()
def
country()
def
displayName()
def
hasTransitions()
def
id()
def
isDaylightTime()
定义
isValid()
定义
offsetData()
定义
__ne__()
定义
__eq__()
定义
swap()
定义
territory()
定义
timeSpec()
静态函数#
注意
本文档可能包含一些从C++自动转换为Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译存在问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述#
日期和时间组合在一起时,结果的意义取决于时间表示的方式。存在各种表示时间的国际标准;其中之一,UTC,对应格林尼治的太阳平均时间(也称为GMT)。Qt支持的所有其他时间系统最终都相对于UTC进行指定。此类实例提供了一个无状态的计算器,用于UTC与其他时间表示之间的转换。
某些时间表示简单地定义为UTC的固定偏移量。其他时间表示由各国政府为在其领土内使用而定义。后者正确地被称为时区,但自Qt 6.5起
QTimeZone
将它们的表示方式与通用时间系统的表示方式统一。大多数操作系统通常支持的一个时区是本地时间;这假设它与用户居住的时区相对应。对于非本地时区以及那些来自UTC的固定偏移量的时区,Qt只有在操作系统提供一些访问该信息的方式时才能提供支持。当Qt构建时,
timezone
功能控制该信息是否可用。当不可用时,某些QTimeZone
构造函数和方法从API中排除;这些被记录为依赖于功能timezone
。请注意,即使Qt通过此功能构建,由于系统配置不当或某些标准包(例如Linux上的tzdata
包)未安装,用户可能无法使用此功能。当时区信息可用时,默认启用此功能。此类主要设计用于在
QDateTime
中使用;大多数应用程序无需直接访问此类,而应在构建QDateTime
时使用其实例。备注#
QTimeZone
类,与QDateTime
类类似,以秒为单位测量与 UTC 的偏移量。这与它们通常以毫秒为单位的测量方法形成对比。现实世界中的时区通常具有 UTC 偏移量,这是5分钟的整数倍(300秒),至少是在1970年之前。从 UTC 正向偏移给出将任何给定日期中午时间放在当天 UTC 中午之前的时间表示;负向偏移则将中午时间放在当天 UTC 中午之后。轻量级时间表示#
QTimeZone
即使在禁用timezone
功能时也能表示 UTC、本地时间以及与 UTC 的固定偏移量。它在功能启用时的这种表示形式也是可用的;它是一种更轻量级的形式,使用它进行处理的效率通常会更高,除非正在使用仅在启用timezone
功能时才可用的方法。有关构建这些表示方法的信息,请参阅Initialization
和fromSecondsAheadOfUtc(int)
。本文档在描述由系统提供的或标准信息描述的时间表示时使用“时区”一词,更广泛的时间表示则包括这些轻量级形式。仅在启用
timezone
功能时才可用的方法对于时区来说可能比轻量级时间表示更为便宜,对于这些方法可能需要构造一个合适的瞬态时区对象以转发查询。IANA 时区 ID#
QTimeZone
使用在 IANA 时区数据库中定义的 IANA 时区 ID(http://www.iana.org/time-zones)。这是确保所有支持的平台具有标准的 ID。大多数平台默认支持 IANA ID 和 IANA 数据库,但对于 Windows 需要进行到本地 ID 的映射。以下将提供更多详细信息。IANA ID 可以并且确实会定期更改,并且可能根据主机系统数据的更新时间而变化。因此,您不能依赖于任何特定 ID 确实在任何主机系统上存在。您必须使用
availableTimeZoneIds()
来确定哪些 IANA ID 可用。IANA ID 和数据库也称为 Olson ID 和数据库,以数据库的原始编译者命名。
UTC 偏移时区#
提供了一个默认的UTC时区后端,当启用功能
timezone
时,它始终可用。这提供了一系列UTC-16:00到UTC+16:00范围内的通用UTC偏移时区。这些时区可以使用标准ISO格式名称创建,例如“UTC+00:00”,如availableTimeZoneIds()
所列,或者使用类似形式的名称,结合偏移秒数。Windows时区#
与标准IANA时区数据库相比,Windows原生时区支持非常有限。Windows时区覆盖更大的地理区域,因此在转换方面不太准确。它们也不支持大量的历史数据,因此可能只有当前年份是准确的。特别是,当MS的系统数据声称在1900年之前观察到了夏令时(这是历史事实是错误的),这个声明将被忽略,而1900年(据说)在强制执行的标准时间总是有效的。
QTimeZone
使用从Unicode CLDR数据中派生的转换表,将IANA ID和Windows ID映射在一起。QTimeZone
。根据您的Windows和Qt版本,此表可能无法提供有效的转换,此时将返回“UTC”。QTimeZone
提供公共API来使用此转换表。使用的Windows ID是时区的Windows注册表键,也是MS Exchange EWS ID,但它不同于MS Exchange在2007年之前版本中使用的时区名称(TZID)和COD代码。注意
当Qt使用ICU库构建时,它将优先使用Windows系统API,绕过使用不同名称的所有API问题。
系统时区#
方法
systemTimeZoneId()
返回当前的系统IANA时区ID,在类Unix系统上始终正确。在Windows上,此ID将使用内部转换表和用户的选定国家/地区从Windows系统ID转换而来。因此,任何Windows安装都可能存在Qt不知道的ID,在这种情况下将返回“UTC”。使用系统时区ID创建一个新的
QTimeZone
实例将仅生成一个固定的带名称的时区副本,即使系统时区发生变化,它也不会改变。systemTimeZone()
将返回一个代表由该系统ID命名的区域的实例。请注意,使用此系统区域构造QDateTime
可能与使用LocalTime
作为其TimeSpec
的QDateTime
的行为不同,因为后者直接使用系统API访问本地时间信息,可能表现不同(特别是在用户调整系统区域设置时可能会做出调整)。时区偏移量#
UTC和时区中本地时间之间的差异以从UTC的秒数偏移量来表示,即添加到UTC以获得本地时间的秒数。总偏移量由两部分组成,即标准时间偏移量和夏令时偏移量。标准时间偏移量是添加到UTC以获得时区的标准时间的秒数。夏令时偏移量是添加到标准时间偏移量的秒数,以获得时区的夏令时(简称DST,有时也称为“夏令时”)。DST的通常情况(冬天使用标准时间,夏天使用夏令时)具有正的夏令时偏移量。然而,某些时区有负的DST偏移量,用于冬天,夏天使用标准时间。
请注意,时区的标准和DST偏移量可能会随着时间的推移而改变,因为各国已经改变了DST法律,甚至他们的标准时间偏移量。
许可#
此类包括根据Unicode数据文件和软件许可协议从CLDR数据文件中获得的数据。有关详细信息,请参阅Unicode通用区域数据存储库(CLDR)。
查阅
QDateTime
QCalendar
- 类 初始化#
最简单轻量级时间表示的类型。
此枚举标识一个轻量级时间表示类型,以传递到
QTimeZone
构造函数,其中不需要更多数据。它们对应于TimeSpec
的类似命名的成员。常量
描述
QTimeZone.LocalTime
此时间表示与系统函数隐式使用
time_t
和struct tm
值映射本地时间和UTC时间的类型相对应。QTimeZone.UTC
这次表示,国际协调时间(UTC),是所有支持的时间表示中,公历时间所参照的基础表示。它由国际电信联盟定义。
版本 6.5 中的新增内容。
- class TimeType#
时区时间的类型,例如请求名称时。在不实行夏令时的地方时区中,所有三个值可能都返回相同的结果。
常量
描述
QTimeZone.StandardTime
时区的标准时间,即在夏令时不起作用时的时间。例如,在格式化显示名称时,将显示类似于“太平洋标准时间”的内容。
QTimeZone.DaylightTime
夏令时时的时间。例如,在格式化显示名称时,将显示类似于“太平洋夏令时”的内容。
QTimeZone.GenericTime
非特定标准或夏令时时间的时间,可以是未知时间或中性形式。例如,在格式化显示名称时,将显示类似于“太平洋时间”的内容。
此类型仅在启用
timezone
功能时可用。
- class NameType#
时区名称的类型。
常量
描述
QTimeZone.DefaultName
时区名称的默认形式,例如,长名称、短名称或偏移名称。
QTimeZone.LongName
时区名称的长形式,例如,“中欧时间”。
QTimeZone.ShortName
时区名称的短形式,通常是缩写,例如,“CET”。
QTimeZone.OffsetName
时区名称的标准 ISO 偏移形式,例如,“UTC+01:00”。
此类型仅在启用
timezone
功能时可用。
- PySide6.QtCore.QTimeZone.MinUtcOffsetSecs#
- PySide6.QtCore.QTimeZone.MaxUtcOffsetSecs#
- __init__(spec)#
- 参数:
spec –
Initialization
创建一个描述 UTC 或本地时间的轻量级实例。
- __init__()
创建一个空/无效的时区实例。
- __init__(offsetSeconds)
- 参数:
offsetSeconds – int
创建一个给定偏移量
offsetSeconds
的时区实例,从 UTC 开始。从 UTC 的
offsetSeconds
必须在-16小时到+16小时的范围内,否则将返回无效时区。此构造函数仅在启用功能
timezone
时可用。返回的实例等同于轻量级时间表示QTimeZone::fromSecondsAfterUtc(offsetSeconds)
,尽管它是作为时区实现的。- __init__(other)
- 参数:
other –
QTimeZone
复制构造函数:将
other
复制到本实例。- __init__(ianaId)
- 参数:
ianaId –
QByteArray
使用请求的 IANA ID
ianaId
创建时区实例。ID 必须是可用的系统 ID 或有效的 UTC-with-offset ID,否则将返回无效时区。对于 UTC-with-offset IDs,当它们实际上不是 IANA IDs 时,结果实例的
id()
可能与构造函数传递的 ID 不同。此构造函数仅在启用功能
timezone
时可用。- __init__(zoneId, offsetSeconds, name, abbreviation[, territory=QLocale.AnyTerritory[, comment=""]])
- 参数:
zoneId –
QByteArray
offsetSeconds – int
name – 字符串
abbreviation – 字符串
territory –
Country
comment – 字符串
创建一个以固定 UTC 偏移量设置的定制时区实例。
返回的时间区域ID为
zoneId
,与UTC的偏移量为offsetSeconds
。属性name
将是用于displayName()
方法的LongName
的名称,abbreviation
将被displayName()
用于ShortName
,并将由abbreviation()
使用,可选的territory
将由territory()
使用。属性comment
是用户可能在一个GUI中看到的可选说明,帮助用户选择时间区域。属性
zoneId
不能 是由availableTimeZoneIds()
返回的可用系统ID之一。从UTC的偏移量必须在 -16 小时到 +16 小时的范围内。如果自定义时间区域没有特定的领土,则将其设置为
AnyTerritory
的默认值。此构造函数仅在启用功能
timezone
时可用。返回给定
atDateTime
的时区缩写。缩写可能会因夏令时更改甚至历史事件而改变。请注意,缩写在此时区中不一定唯一,不应用来代替ID或显示名称。
此方法仅在启用功能
timezone
时可用。将此
QTimeZone
转换为timeSpec()
为TimeZone
的时间区域。在所有情况下,结果的
timeSpec()
是TimeZone
。当此QTimeZone
的timeSpec()
是TimeZone
时,返回此QTimeZone
本身。如果timeSpec()
是LocalTime
则返回systemTimeZone()
。如果
timeSpec()
是UTC
,返回utc()
。如果是OffsetFromUTC
则将QTimeZone
(int) 的偏移量传递给它,并返回结果。当使用轻量级时间表示法(本地时间、UTC时间或与UTC固定的偏移量的时间)时,在启用功能
timezone
的条件下使用的方法可能比使用对应的时间区域更昂贵。此方法将轻量级时间表示法映射到相应的时间区域——即,基于系统提供或标准数据的实例。此方法仅在启用功能
timezone
时可用。查阅
Initialization)
fromSecondsAheadOfUtc()
- 静态 availableTimeZoneIds()#
- 返回类型:
.QByteArray 列表
返回系统上所有可用的 IANA 时区 ID 列表。
此方法仅在启用功能
timezone
时可用。- static availableTimeZoneIds(territory)
- 参数:
territory –
Country
- 返回类型:
.QByteArray 列表
- static availableTimeZoneIds(offsetSeconds)
- 参数:
offsetSeconds – int
- 返回类型:
.QByteArray 列表
返回具有给定标准时间偏移量
offsetSeconds
的所有可用的 IANA 时区 ID 列表。如果支持的偏移量,则
QTimeZone(offsetSeconds).id()
也会包含在列表中,即使它不是一个 IANA ID。这只有在没有与给定偏移量对应的 IANA UTC 偏移量 ID 时才会发生。此方法仅在启用功能
timezone
时可用。查阅
isTimeZoneIdAvailable()
QTimeZone(int)
- comment()#
- 返回类型:
str
返回时区的任何注释。
注释由主机平台提供,以帮助用户选择正确的时间区域。根据平台,这可能不会本地化。
此方法仅在启用功能
timezone
时可用。使用
territory()
代替。返回时区的领土。
此方法仅在启用功能
timezone
时可用。返回给定
atDateTime
的夏令时偏移量,即添加到标准时间偏移量以获得本地夏令时的时间(秒数)。例如,对于时区“Europe/Berlin”,夏令时偏移量是 +3600 秒。在标准时间期间,daylightTimeOffset() 将返回 0,而在夏令时生效时将返回 +3600。
此方法仅在启用功能
timezone
时可用。- displayName(timeType[, nameType=QTimeZone.DefaultName[, locale=QLocale()]])#
返回给定
timeType
和nameType
在给定locale
中的本地化时区显示名称。所请求的nameType
和locale
可能不支持所有平台,在这种情况下将返回最佳可用选项。如果未提供
locale
,则将使用应用程序默认的区域设置。如果时区显示名称随着时间的推移而更改,则将使用最新的名称。
此方法仅在启用功能
timezone
时可用。- displayName(atDateTime[, nameType=QTimeZone.DefaultName[, locale=QLocale()]])
返回给定
atDateTime
和nameType
以及给定locale
中的本地化时区显示名称。所请求的nameType
和locale
可能不支持所有平台,在这种情况下将返回最佳可用选项。如果未提供
locale
,则将使用应用程序默认的区域设置。显示名称可能会根据夏令时或历史事件而更改。
此方法仅在启用功能
timezone
时可用。- fixedSecondsAheadOfUtc()#
- 返回类型:
int
对于轻量级的时间表示,其
timeSpec()
是OffsetFromUTC
,则返回它所描述的从 UTC 的固定偏移量。对于任何其他时间表示,即使该时间表示确实具有相对于 UTC 的恒定偏移量,也返回 0。- hasDaylightTime()#
- 返回类型:
bool
如果时区在任何时候都实行过夏令时,则返回
true
。此方法仅在启用功能
timezone
时可用。- hasTransitions()#
- 返回类型:
bool
如果在系统后端支持获取转换,则返回
true
。转换是时区的变化:这些发生在夏令时开启或关闭以及当局更改时区偏移量时。
此方法仅在启用功能
timezone
时可用。- 静态ianaIdToWindowsId(ianaId)#
- 参数:
ianaId –
QByteArray
- 返回类型:
返回给定
ianaId
的 Windows ID。此方法仅在启用功能
timezone
时可用。- id()#
- 返回类型:
返回时区的 IANA ID。
IANA ID 在所有平台上都使用。在 Windows 中,这些 ID 从 Windows ID 翻译为时区和地区的最佳匹配 IANA ID。
如果此时区实例不是从 IANA ID 构造的,则其 ID 由其构造方式确定。在大多数情况下,用于构造实例时传递的 ID 被使用。(自定义区域的构造函数使用其传递的 ID,这个 ID 不能是 IANA ID。)有两个例外。
仅通过传递秒数 UTC 偏移量构建的实例在构造时未传递 ID。
仅接受 IANA ID 的构造函数也将接受一些实际上是 IANA ID 的 UTC-offset IDs:其对这些的处理与第一个例外中传递相应秒数偏移量的处理相同。
在这两个异常情况下,如果存在具有指定偏移量的 IANA UTC-offset 区域,则构建的实例将使用该 IANA 区域的 ID,即使这可能与构造函数传递的(非 IANA)UTC-offset ID 不同。否则,实例将使用从其偏移量合成的 ID,格式为 UTC±hh:mm:ss,省略任何尾随的 :00(对于零秒或分钟)。再次指出,这可能与传递给构造函数的 UTC-offset ID 不同。
此方法仅在启用功能
timezone
时可用。如果给定
atDateTime
的时间光节约时段正在生效,则返回true
。此方法仅在启用功能
timezone
时可用。- 静态isTimeZoneIdAvailable(ianaId)#
- 参数:
ianaId –
QByteArray
- 返回类型:
bool
如果系统上有给定的时区
ianaId
,则返回true
。这可能包括一些非IANA ID,特别是UTC偏移ID,这些ID未在
availableTimeZoneIds()
中被列出。此方法仅在启用功能
timezone
时可用。- isUtcOrFixedOffset()#
- 返回类型:
bool
如果
timeSpec()
是UTC
或OffsetFromUTC
,则返回true
。如果为真,时间描述不会随时间改变,例如不会随季节调整夏令时,这可能会在本地时间或时区中发生。了解这一点可能可以节省调用代码执行各种其他检查的需要。
- static isUtcOrFixedOffset(spec)
- 参数:
spec –
TimeSpec
- 返回类型:
bool
如果
spec
是UTC
或OffsetFromUTC
,则返回true
。- isValid()#
- 返回类型:
bool
如果此时区有效,则返回
true
。返回给定
afterDateTime
后的第一个时区转换。当你有一个转换时间并希望找到该时间之后的转换时,这最有用。如果没有给定
afterDateTime
后的转换,将返回一个无效的OffsetData
,该数据有一个无效的QDateTime
,其atUtc
为无效。给定的
afterDateTime
是排他的。此方法仅在启用功能
timezone
时可用。返回给定
forDateTime
的有效偏移详情。这相当于调用
abbreviation()
和所有三个偏移函数,但是更高效。如果给定的日期时间没有这些数据,将返回一个无效的OffsetData
,其atUtc
是无效的QDateTime
。此方法仅在启用功能
timezone
时可用。返回给定
atDateTime
的总有效偏移量,即要将 UTC 添加多少秒才能获得本地时间。这包括任何可能生效的夏令时偏移,即给定日期时间的standardTimeOffset()
和daylightTimeOffset()
的总和。例如,对于时区“Europe/Berlin”,标准时间偏移为 +3600 秒,夏令时偏移也为 +3600 秒。在标准时间下,offsetFromUtc() 返回 +3600(UTC+01:00),而在夏令时则返回 +7200(UTC+02:00)。
此方法仅在启用功能
timezone
时可用。如果
lhs
时区不等于rhs
时区,则返回true
。如果两种表示形式在内部描述不同,即使它们在表示所有时间时刻上达成一致,它们也是不同的。特别是,轻量级时间表示形式可能与时区相吻合,但这两种表示形式并不相等。
如果
lhs
时区等于rhs
时区,则返回true
。如果两种表示形式在内部描述不同,即使它们在表示所有时间时刻上达成一致,它们也是不同的。特别是,轻量级时间表示形式可能与时区相吻合,但这两种表示形式并不相等。
返回给定
beforeDateTime
之前第一个时区转换时间。这在您有转换时间并希望找到它之前的转换时非常有用。如果在给定
beforeDateTime
之前没有转换,则将返回一个无效的OffsetData
,其atUtc
为无效的QDateTime
。给定的
beforeDateTime
是排他的。此方法仅在启用功能
timezone
时可用。返回给定
atDateTime
时的标准时间偏移,即要将 UTC 加上的秒数以获得本地标准时间。这排除了可能生效的夏令时偏移。例如,对于时区“Europe/Berlin”,标准时间偏移是 +3600 秒。在标准时间和夏令时期间,
offsetFromUtc()
将返回 +3600(UTC+01:00)。此方法仅在启用功能
timezone
时可用。与此时间区域实例交换
other
。此函数运行非常快速且永远不会失败。返回一个描述本地系统时间的
QTimeZone
对象。此方法仅在功能
timezone
启用时才可用。返回的实例通常等同于轻量级时间表示QTimeZone(QTimeZone::LocalTime)
,尽管它实现为一个时间区域。返回的的对象将不会更改以反映系统时间区域的任何后续更改。它代表在调用
asBackendZone()
时有效的本地时间。在配置不当的系统(如缺少 Qt 编译的依赖后端所需的时间数据)上,它可能无效。在这种情况下,会输出警告。- static systemTimeZoneId()#
- 返回类型:
返回当前系统时间区域 IANA ID。
等同于调用
systemTimeZone()
.id()
,但可能绕过一些计算。从返回的字节数组构造QTimeZone
将产生与systemTimeZone()
相同的结果。如果后端无法确定正确系统区域,则结果为空。在这种情况下,
systemTimeZone()
.isValid()
为 false,并且在调用此方法或systemTimeZone()
的情况下会输出警告。如果后端能够确定正确的系统时区但不知道其名称,则返回一个空字节数组。例如,在Windows上,系统原生ID被转换为IANA ID - 如果系统ID不被内部转换代码所知,则结果应为空。在这种情况下,
systemTimeZone()
。若isValid()
为真。此方法仅在启用功能
timezone
时可用。返回时区的领土。
AnyTerritory
的返回意味着区没有已知的领土关联。在某些情况下,这可能是由于该区没有关联的领土 - 例如,UTC - 或因为该区被用于几个领土 - 例如,CET。在其他情况下,QTimeZone
后端可能不知道该区与哪个领土相关联 - 例如,因为它不是所使用领土的主要时区。此方法仅在启用功能
timezone
时可用。返回一个标识时间表示类型的
TimeSpec
。如果结果是
TimeZone
,则该时间描述是一个时区(由系统提供或标准数据支持);否则,它是轻量级的时间表示。如果结果是LocalTime
,则它描述本地时间:有关详细信息,请参阅TimeSpec
。- transitions(fromDateTime, toDateTime)#
返回给定日期时间的所有时区转换的列表。
给定的
fromDateTime
和toDateTime
是包含的。每个条目的atUtc
成员描述了转换的时刻,此时其他成员给出的偏移量和缩写开始生效。此方法仅在启用功能
timezone
时可用。返回一个描述作为时区的 UTC 的
QTimeZone
对象。此方法仅在启用功能
timezone
时可用。它与传递 0 给QTimeZone
(int offsetSeconds) 以及轻量级时间表示QTimeZone
(UTC
) 相等,尽管实现为一个时区,但与后者不同。- static windowsIdToDefaultIanaId(windowsId)#
- 参数:
windowsId –
QByteArray
- 返回类型:
为给定的
windowsId
返回默认的 IANA ID。由于 Windows ID 可以覆盖不同领土中的多个 IANA ID,此函数返回不考虑领土的最常用的 IANA ID,因此应谨慎使用。通常最好请求特定领土的默认值。
此方法仅在启用功能
timezone
时可用。- static windowsIdToDefaultIanaId(windowsId, territory)
- 参数:
windowsId –
QByteArray
territory –
Country
- 返回类型:
为给定的
windowsId
和territory
返回默认的 IANA ID。由于Windows ID可以覆盖特定领土内的多个IANA ID,因此该领土中最常用的IANA ID将被返回。
作为特殊情况,
AnyTerritory
返回没有已知领土关联的那些IANA ID的默认值。此方法仅在启用功能
timezone
时可用。- static windowsIdToIanaIds(windowsId)#
- 参数:
windowsId –
QByteArray
- 返回类型:
.QByteArray 列表
返回指定
windowsId
的所有IANA ID。返回的列表按字母顺序排序。
此方法仅在启用功能
timezone
时可用。- static windowsIdToIanaIds(windowsId, territory)
- 参数:
windowsId –
QByteArray
territory –
Country
- 返回类型:
.QByteArray 列表
返回特定
windowsId
和territory
的所有IANA ID。作为特殊情况,
AnyTerritory
选择那些没有已知领土关联的IANA ID。返回的列表按使用频率排序,即在领土内较大的区域将首先列出。
此方法仅在启用功能
timezone
时可用。