QTimeZone Class
QTimeZone 标识时间表示法与 UTC 的关系。更多
头文件: | #include <QTimeZone> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
该类可等价比较。
注意:该类中的所有函数都是线程安全的。
公共类型
struct | OffsetData |
(since 6.5) enum | Initialization { LocalTime, UTC } |
enum | NameType { DefaultName, LongName, ShortName, OffsetName } |
OffsetDataList | |
enum | TimeType { StandardTime, DaylightTime, GenericTime } |
公共函数
QTimeZone() | |
(since 6.5) | QTimeZone(QTimeZone::Initialization spec) |
QTimeZone(const QByteArray &ianaId) | |
QTimeZone(int offsetSeconds) | |
QTimeZone(const QByteArray &zoneId, int offsetSeconds, const QString &name, const QString &abbreviation, QLocale::Territory territory = QLocale::AnyTerritory, const QString &comment = QString()) | |
QTimeZone(const QTimeZone &other) | |
QTimeZone(QTimeZone &&other) | |
~QTimeZone() | |
QString | abbreviation(const QDateTime &atDateTime) const |
(since 6.5) QTimeZone | asBackendZone() const |
QString | comment() const |
int | daylightTimeOffset(const QDateTime &atDateTime) const |
QString | displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType = DefaultName, const QLocale &locale = QLocale()) const |
QString | displayName(const QDateTime &atDateTime, QTimeZone::NameType nameType = DefaultName, const QLocale &locale = QLocale()) const |
(since 6.5) int | fixedSecondsAheadOfUtc() const |
(since 6.8) bool | hasAlternativeName(QByteArrayView alias) const |
bool | hasDaylightTime() const |
bool | hasTransitions() const |
QByteArray | id() const |
bool | isDaylightTime(const QDateTime &atDateTime) const |
(since 6.5) bool | isUtcOrFixedOffset() const |
bool | isValid() const |
QTimeZone::OffsetData | nextTransition(const QDateTime &afterDateTime) const |
QTimeZone::OffsetData | offsetData(const QDateTime &forDateTime) const |
int | offsetFromUtc(const QDateTime &atDateTime) const |
QTimeZone::OffsetData | previousTransition(const QDateTime &beforeDateTime) const |
int | standardTimeOffset(const QDateTime &atDateTime) const |
void | swap(QTimeZone &other) |
(since 6.2) QLocale::Territory | territory() const |
(since 6.5) Qt::TimeSpec | timeSpec() const |
CFTimeZoneRef | toCFTimeZone() const |
NSTimeZone * | toNSTimeZone() const |
QTimeZone::OffsetDataList | transitions(const QDateTime &fromDateTime, const QDateTime &toDateTime) const |
QTimeZone & | operator=(QTimeZone &&other) |
QTimeZone & | operator=(const QTimeZone &other) |
静态公共成员
const int | MaxUtcOffsetSecs |
const int | MinUtcOffsetSecs |
QList<QByteArray> | availableTimeZoneIds() |
QList<QByteArray> | availableTimeZoneIds(QLocale::Territory territory) |
QList<QByteArray> | availableTimeZoneIds(int offsetSeconds) |
QTimeZone | fromCFTimeZone(CFTimeZoneRef timeZone) |
(since 6.5) QTimeZone | fromDurationAheadOfUtc(std::chrono::seconds offset) |
QTimeZone | fromNSTimeZone(const NSTimeZone *timeZone) |
(since 6.5) QTimeZone | fromSecondsAheadOfUtc(int offset) |
(since 6.4) QTimeZone | fromStdTimeZonePtr(const int *timeZone) |
QByteArray | ianaIdToWindowsId(const QByteArray &ianaId) |
bool | isTimeZoneIdAvailable(const QByteArray &ianaId) |
(since 6.5) bool | isUtcOrFixedOffset(Qt::TimeSpec spec) |
QTimeZone | systemTimeZone() |
QByteArray | systemTimeZoneId() |
QTimeZone | utc() |
QByteArray | windowsIdToDefaultIanaId(const QByteArray &windowsId) |
QByteArray | windowsIdToDefaultIanaId(const QByteArray &windowsId, QLocale::Territory territory) |
QList<QByteArray> | windowsIdToIanaIds(const QByteArray &windowsId) |
QList<QByteArray> | windowsIdToIanaIds(const QByteArray &windowsId, QLocale::Territory territory) |
相关非成员
bool | operator!=(const QTimeZone &lhs, const QTimeZone &rhs) |
bool | operator==(const QTimeZone &lhs, const QTimeZone &rhs) |
详细说明
当日期和时间结合在一起时,结果的意义取决于时间的表示方式。表示时间有多种国际标准;其中之一 UTC 与格林威治太阳平均时(又称 GMT)的传统标准相对应。Qt 支持的所有其他时间系统最终都是根据 UTC 指定的。该类的实例提供了一个无状态计算器,用于在 UTC 和其他时间表示法之间进行转换。
有些时间表示法只是以 UTC 的固定偏移量来定义的。另一些则由政府定义,供其辖区内使用。后者被正确地称为时区,但 QTimeZone(自 Qt 6.5 起)将其表示法与一般时间系统的表示法统一起来。大多数操作系统通常支持的一个时区被指定为当地时间;该时区被假定为对应于用户所居住的时区。
对于除本地时间、UTC 和与 UTC 有固定偏差的时区以外的时区,Qt 只能在操作系统提供了某种访问该信息的方法时才能提供支持。在构建 Qt 时,timezone
功能会控制此类信息是否可用。如果不可用,QTimeZone 的某些构造函数和方法将被排除在其 API 之外;这些构造函数和方法被记录为取决于特性timezone
。请注意,即使 Qt 在构建时启用了该功能,如果用户的系统配置错误,或未安装某些标准软件包(例如 Linux 上的tzdata
软件包),也可能无法使用该功能。在有时区信息的情况下,该功能默认为启用。
该类主要用于QDateTime ;大多数应用程序不需要直接访问该类,而应在构建QDateTime 时使用该类的实例。
注: 为与QDateTime 保持一致,QTimeZone 不考虑闰秒。
备注
与QDateTime 一样,QTimeZone 也以秒为单位测量与 UTC 的偏移。这与他们以毫秒为单位测量时间的做法不同。现实世界时区的 UTC 偏移通常是 5 分钟(300 秒)的整数倍,至少在 1970 年以前是这样。UTC正偏移量给出的时间表示法是将任何给定日期的正午置于当天的UTC正午之前;负偏移量则将正午置于当天的UTC正午之后。
轻量级时间表示法
即使禁用了timezone
功能,QTimeZone 也能表示 UTC、本地时间和 UTC 的固定偏移量。它的表示形式在启用该功能时也可用;这是一种更轻量级的形式,除非使用只有在启用功能timezone
时才可用的方法,否则使用它进行处理通常会更有效率。有关如何构建这些表示法,请参阅Initialization 和QTimeZone::fromSecondsAheadOfUtc(int)。
本文档区分了 "时区"(用于描述由系统提供或标准信息描述的时间表示法)和时间表示法(包括这些轻量级形式)。只有在启用timezone
功能时才可用的方法,对于时区来说可能比轻量级时间表示法更便宜,因为对于轻量级时间表示法来说,这些方法可以构建一个合适的瞬时时区对象来转发查询。
IANA 时区 ID
QTimeZone 使用 IANA 时区数据库 (http://www.iana.org/time-zones) 中定义的 IANA 时区 ID。这是为了确保所有支持的平台都使用标准 ID。大多数平台都支持 IANA ID 和 IANA 数据库,但 Windows 需要与本地 ID 进行映射。详情请见下文。
IANA ID 可能而且确实会定期更改,而且会根据主机系统数据的更新时间而变化。因此,您不能依赖于任何主机系统上存在的任何给定 ID。您必须使用availableTimeZoneIds() 来确定哪些 IANA ID 可用。
IANA ID 和数据库也被称为 Olson ID 和数据库,以数据库最初编译者的名字命名。
UTC 偏移时区
当启用timezone
功能时,默认的 UTC 时区后台始终可用。它提供了一组通用的UTC 偏移时区,范围为 UTC-16:00 至 UTC+16:00。这些时区可以使用availableTimeZoneIds() 列出的标准 ISO 格式名称(如 "UTC+00:00")创建,也可以使用与偏移秒数类似的名称。
Windows 时区
与标准 IANA TZ 数据库相比,Windows 本机时区支持受到很大限制。Windows 时区覆盖的地理区域更大,因此转换的准确性也更低。它们也不支持那么多历史数据,因此可能只对当年准确。特别是,当 MS 的时区数据声称 1900 年以前遵守 DST 时(这在历史上是不真实的),该声称会被忽略,而 1900 年生效的标准时间(据称)会被认为一直有效。
QTimeZone 使用源自 Unicode CLDR 数据的转换表来映射 IANA ID 和 Windows ID。根据您的 Windows 和 Qt 版本,该转换表可能无法提供有效的转换,此时将返回 "UTC"。
QTimeZone 提供了使用此转换表的公共 API。使用的 Windows ID 是时区的 Windows 注册表密钥,也是 MS Exchange EWS ID,但与 2007 年之前版本中 MS Exchange 使用的时区名称 (TZID) 和 COD 代码不同。
注意: 当使用 ICU 库构建 Qt 时,它将优先于 Windows 系统 API 使用,从而绕过了这些 API 使用不同名称的所有问题。
系统时区
方法systemTimeZoneId() 返回当前系统的 IANA 时区 ID,在类 Unix 系统中,该 ID 始终是正确的。在 Windows 系统中,该 ID 是通过内部翻译表和用户选择的国家从 Windows 系统 ID 翻译而来的。因此,任何 Windows 安装都有可能存在 Qt 未知的 ID,在这种情况下,Qt 将返回 "UTC"。
使用系统时区 ID 创建一个新的 QTimeZone 实例只会产生一个固定命名的时区副本,即使系统时区发生变化,它也不会改变。QTimeZone::systemTimeZone() 将返回一个以该系统 ID 命名的时区实例。请注意,使用该系统时区构建QDateTime 时,可能会与构建使用Qt::LocalTime 作为其Qt::TimeSpec 的QDateTime 时表现不同,因为后者直接使用系统 API 来访问本地时间信息,其表现可能不同(尤其是,如果用户调整了系统时区设置,可能会有所调整)。
时区偏移
UTC 与某时区当地时间之间的差异用偏移表示,单位为从 UTC 开始的秒数,即在 UTC 的基础上增加多少秒才能得到当地时间。总偏移量由两部分组成,即标准时间偏移量和夏令时偏移量。标准时间偏移量是为获得时区标准时间而在 UTC 基础上增加的秒数。夏令时偏移量是在标准时间偏移量的基础上增加的秒数,以获得时区的夏令时(简称 DST,有时也称为 "夏令时 "或 "夏时制")。夏令时的通常情况(冬季使用标准时间,夏季使用夏令时)是正夏令时偏移。不过,有些时区的夏令时偏移为负数,冬季使用标准时间,夏季使用夏令时。
请注意,一个时区的标准时间和夏令时偏移量可能会随着时间的推移而改变,因为有些国家改变了夏令时法,甚至改变了标准时间偏移量。
许可证
本类包括根据统一码数据文件和软件许可条款从 CLDR 数据文件中获取的数据。详情请参阅统一码通用区位数据存储库 (CLDR)。
成员类型文档
[since 6.5]
enum QTimeZone::Initialization
最简单的轻量级时间表示类型。
该枚举用于确定轻量级时间表示的类型,以传递给QTimeZone 构造函数,无需其他数据。它们与Qt::TimeSpec 中的同名成员相对应。
常量 | 值 | 描述 |
---|---|---|
QTimeZone::LocalTime | 0 | 该时间表示法与系统函数隐式使用的时间表示法相对应,系统函数使用time_t 和struct tm 值在本地时间和 UTC 时间之间进行映射。 |
QTimeZone::UTC | 1 | 该时间表示法(协调世界时)是所有支持的时间表示法中民用时间所参照的基本表示法。它由国际电信联盟(International Telecommunication Union)定义。 |
该枚举在 Qt 6.5 中引入。
enum QTimeZone::NameType
时区名称的类型。
常数 | 值 | 描述 |
---|---|---|
QTimeZone::DefaultName | 0 | 时区名称的默认形式,即 LongName、ShortName 或 OffsetName 之一 |
QTimeZone::LongName | 1 | 时区名称的长形式,例如 "中欧时间 |
QTimeZone::ShortName | 2 | 时区名称的简写形式,通常是缩写,如 "CET"(在有时区名称简写的地方),否则是紧凑的 GMT 偏移形式,如 "GMT+1"。 |
QTimeZone::OffsetName | 3 | 时区名称的标准 ISO 偏移形式,如 "UTC+01:00"。 |
该类型仅在启用timezone
功能时可用。
QTimeZone::OffsetDataList
QList<OffsetData> 的同义词。
该类型仅在启用timezone
功能时可用。
enum QTimeZone::TimeType
时区时间类型,例如在请求名称时。在不使用 DST 的时区,所有三个值都可能返回相同的结果。
常数 | 值 | 说明 |
---|---|---|
QTimeZone::StandardTime | 0 | 时区的标准时间,即不实行夏令时的时间。例如,在格式化显示名称时,将显示类似 "太平洋标准时间 "的内容。 |
QTimeZone::DaylightTime | 1 | 夏令时生效时的时间。例如,格式化显示名称时,将显示 "太平洋夏令时"。 |
QTimeZone::GenericTime | 2 | 非特定标准时间或夏令时的时间,可以是未知时间,也可以是中性时间。例如,当格式化显示名称时,将显示 "太平洋时间"。 |
该类型仅在启用timezone
功能时可用。
成员函数文档
[static, since 6.5]
QTimeZone QTimeZone::fromDurationAheadOfUtc(std::chrono::seconds offset)
[static, since 6.5]
QTimeZone QTimeZone::fromSecondsAheadOfUtc(int offset)
返回比 UTC 提前一个固定offset 的时间表示(以秒为单位)。
offset 与世界协调时的距离必须在 -16 小时至 +16 小时之间,否则将返回无效时区。返回的QTimeZone 是轻量级时间表示,而不是时区(由系统提供或标准数据支持)。
如果偏移量为 0,返回实例的timeSpec() 将是Qt::UTC 。否则,如果offset 有效,timeSpec() 就是Qt::OffsetFromUTC 。返回无效时区时,Qt::TimeZone 将作为其timeSpec() 。
此函数在 Qt 6.5 中引入。
另请参阅 QTimeZone(int)、asBackendZone( )、fixedSecondsAheadOfUtc( )、MinUtcOffsetSecs 和MaxUtcOffsetSecs 。
[noexcept]
QTimeZone::QTimeZone()
创建无效时区实例。
[noexcept, since 6.5]
QTimeZone::QTimeZone(QTimeZone::Initialization spec)
创建一个描述 UTC 或本地时间的轻量级实例。
该函数在 Qt 6.5 中引入。
另请参阅 fromSecondsAheadOfUtc()、asBackendZone()、utc() 和systemTimeZone()。
[explicit]
QTimeZone::QTimeZone(const QByteArray &ianaId)
使用请求的 IANA ID 创建时区实例ianaId 。
ID 必须是可用的系统 ID 或有效的 UTC 带偏移 ID,否则将返回无效时区。UTC-with-offset(UTC-with-offset)ID 如果实际上不是 IANA ID,则生成实例的id()
可能与传给构造函数的 ID 不同。
该构造函数仅在启用timezone
功能时可用。
另请参阅 availableTimeZoneIds() 和id()。
[explicit]
QTimeZone::QTimeZone(int offsetSeconds)
创建一个时区实例,其与 UTC 的偏移量(offsetSeconds )为给定值。
offsetSeconds 与 UTC 的偏移必须在 -16 小时至 +16 小时的范围内,否则将返回无效时区。
该构造函数仅在启用timezone
功能时可用。返回的实例等同于轻量级时间表示QTimeZone::fromSecondsAheadOfUtc(offsetSeconds)
,尽管它是作为时区实现的。
另请参阅 MinUtcOffsetSecs 、MaxUtcOffsetSecs 和id()。
QTimeZone::QTimeZone(const QByteArray &zoneId, int offsetSeconds, const QString &name, const QString &abbreviation, QLocale::Territory territory = QLocale::AnyTerritory, const QString &comment = QString())
以 UTC 的固定偏移量创建自定义时区实例。
返回的时区 ID 为zoneId ,与 UTC 的偏移量为offsetSeconds 。name 将是displayName() 用于LongName 的名称,abbreviation 将是displayName() 用于ShortName 和abbreviation() 的名称,可选的territory 将是territory() 的名称。comment 是可选注释,可显示在 GUI 中,以帮助用户选择时区。
offsetSeconds 与世界协调时的时差范围必须在 -16 小时至 +16 小时之间。zoneId 必须不是 isTimeZoneIdAvailable() 为真的 ID,除非它是availableTimeZoneIds() 中没有出现的 UTC 偏移名称。
如果自定义时区没有特定的地域,则将其设置为默认值QLocale::AnyTerritory 。
该构造函数仅在启用timezone
功能时可用。
另请参阅 id(),offsetFromUtc(),displayName(),abbreviation(),territory(),comment(),MinUtcOffsetSecs, 和MaxUtcOffsetSecs 。
[noexcept]
QTimeZone::QTimeZone(const QTimeZone &other)
复制构造函数:将other 复制到 this。
[noexcept]
QTimeZone::QTimeZone(QTimeZone &&other)
从other 移动 this 的构造函数。
[noexcept]
QTimeZone::~QTimeZone()
破坏时区。
QString QTimeZone::abbreviation(const QDateTime &atDateTime) const
返回给定atDateTime 的时区缩写。
缩写可能会根据夏令时甚至历史事件发生变化。
注意: 缩写不保证对该时区是唯一的,因此不能用来代替 ID 或显示名称。缩写可能会本地化,具体取决于底层操作系统。要获得一致的本地化,请使用displayName(atDateTime, QTimeZone::ShortName, locale)
。
此方法仅在启用timezone
功能时可用。
另请参阅 displayName() 。
[since 6.5]
QTimeZone QTimeZone::asBackendZone() const
将QTimeZone 转换为timeSpec() 为Qt::TimeZone 的结果。
在所有情况下,结果的timeSpec() 都是Qt::TimeZone 。当QTimeZone 的timeSpec() 为Qt::TimeZone 时,将返回QTimeZone 本身。如果timeSpec() 是Qt::LocalTime ,则会返回systemTimeZone()。
如果timeSpec() 是Qt::UTC ,则会返回QTimeZone::utc()。如果是Qt::OffsetFromUTC ,则通过QTimeZone(int) 传递其偏移量并返回结果。
在使用轻量级时间表示法(本地时间、UTC 时间或与 UTC 有固定偏移的时间)时,使用仅在启用timezone
功能时受支持的方法可能比使用相应的时区更昂贵。此方法可将轻量级时间表示法映射到相应的时区,即基于系统提供或标准数据的实例。
此方法仅在启用timezone
功能时可用。
此函数在 Qt 6.5 中引入。
另请参阅 QTimeZone(QTimeZone::Initialization) 和fromSecondsAheadOfUtc() 。
[static]
QList<QByteArray> QTimeZone::availableTimeZoneIds()
返回本系统中所有可用 IANA 时区 ID 的列表。
此方法仅在启用timezone
功能时可用。
注意: QTimeZone 构造函数也会接受一些不在返回列表中的 UTC 偏移 ID - 列出所有可能的 UTC 偏移 ID 是不切实际的。
另请参阅 isTimeZoneIdAvailable()。
[static]
QList<QByteArray> QTimeZone::availableTimeZoneIds(QLocale::Territory territory)
返回给定territory 的所有可用 IANA 时区 ID 的列表。
作为一种特例,territory 的AnyTerritory 会选择那些与UTC 等非属地关联的时区,而World 则会选择那些有全球默认 IANA ID 的时区。如果需要所有地区的所有时区 ID 列表,请使用标准的 availableTimeZoneIds() 方法。
该方法仅在启用timezone
功能时可用。
另请参阅 isTimeZoneIdAvailable() 和territory()。
[static]
QList<QByteArray> QTimeZone::availableTimeZoneIds(int offsetSeconds)
返回所有可用的 IANA 时区 ID(标准时间偏移量为offsetSeconds )列表。
在支持给定偏移量的情况下,即使QTimeZone(offsetSeconds).id()
不是 IANA ID,也会包含在列表中。只有在没有具有给定偏移量的 IANA UTC-offset ID 时,才会出现这种情况。
此方法仅在启用timezone
功能时可用。
另请参阅 isTimeZoneIdAvailable() 和QTimeZone(int)。
QString QTimeZone::comment() const
返回时区的任何注释。
主机平台可能会提供注释,以帮助用户选择正确的时区。根据平台的不同,注释可能不会本地化。
此方法仅在启用timezone
功能时可用。
int QTimeZone::daylightTimeOffset(const QDateTime &atDateTime) const
返回给定atDateTime 的夏令时偏移量,即在标准时间偏移量上加上多少秒才能得到当地夏令时。
例如,"欧洲/柏林 "时区的夏令时偏移为 +3600 秒。在标准时间内,didayTimeOffset() 将返回 0,而当夏令时生效时,它将返回 +3600。
该方法仅在启用timezone
功能时可用。
另请参阅 offsetFromUtc() 和standardTimeOffset()。
QString QTimeZone::displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType = DefaultName, const QLocale &locale = QLocale()) const
返回本地化的时区显示名称。
返回的名称是给定locale 的名称,在给定timeType 有效时适用,形式由nameType 指示。如果时区显示名称随时间发生变化,则使用当前名称。如果没有给定类型的合适本地化名称,可使用其他名称类型,或返回空字符串。
如果未提供locale ,则将使用应用程序默认的本地化语言。对于客户端代码创建的自定义时区,由于没有本地化数据,因此将使用向构造函数提供的数据。如果该时区无效,将返回空字符串。如果确定系统时区失败,在表示本地时间时也可能出现这种情况。
该方法仅在启用timezone
功能时可用。
另请参阅 abbreviation().
QString QTimeZone::displayName(const QDateTime &atDateTime, QTimeZone::NameType nameType = DefaultName, const QLocale &locale = QLocale()) const
返回本地化的时区显示名称。
返回的名称是给定的locale 的名称,适用于给定的atDateTime ,形式由nameType 指示。显示名称可能会根据 DST 或历史事件发生变化。如果没有给定类型的合适本地化名称,可使用其他名称类型,或返回空字符串。
如果未提供locale ,则将使用应用程序默认的本地化名称。对于客户端代码创建的自定义时区,由于没有本地化数据,因此将使用向构造函数提供的数据。如果该时区无效,将返回空字符串。如果确定系统时区失败,在表示本地时间时也可能出现这种情况。
该方法仅在启用timezone
功能时可用。
另请参阅 abbreviation().
[constexpr noexcept, since 6.5]
int QTimeZone::fixedSecondsAheadOfUtc() const
对于timeSpec() 为Qt::OffsetFromUTC 的轻量级时间表示法,返回它所描述的与 UTC 的固定偏移量。对于任何其他时间表示法,即使该时间表示法确实与 UTC 有固定偏移,它也会返回 0。
此函数在 Qt 6.5 中引入。
[static]
QTimeZone QTimeZone::fromCFTimeZone(CFTimeZoneRef timeZone)
构造一个新的QTimeZone ,其中包含 CFTimeZonetimeZone 的副本。
另请参阅 toCFTimeZone() 。
[static]
QTimeZone QTimeZone::fromNSTimeZone(const NSTimeZone *timeZone)
构造一个新的QTimeZone ,其中包含 NSTimeZonetimeZone 的副本。
另请参阅 toNSTimeZone() 。
[static, since 6.4]
QTimeZone QTimeZone::fromStdTimeZonePtr(const int *timeZone)
返回一个代表与timeZone 相同时区的QTimeZone 对象。timeZone 的 IANA ID 必须是可用的系统 ID 之一,否则将返回无效时区。
此方法仅在启用timezone
功能时可用。
此函数在 Qt 6.4 中引入。
[since 6.8]
bool QTimeZone::hasAlternativeName(QByteArrayView alias) const
如果alias 是该时区的替代名称,则返回true
。
IANA(前身为奥尔森)数据库在其历史上对一些时区进行了重命名。还有一些时区在 1970 年之前只有差异,但现在被视为同义时区。在后一种情况下,一些后端可能拥有 1970 年之前的数据,并生成不同的区。其他后端则可能产生除id() 以外无法区分的区。此方法可确定 ID 是否(至少自 1970 年以来)与此时区对象所描述的时区相同。
该方法仅在启用timezone
功能时可用。
此函数在 Qt 6.8 中引入。
bool QTimeZone::hasDaylightTime() const
如果时区在任何时间实行了夏令时,则返回true
。
此方法仅在启用timezone
功能时可用。
另请参阅 isDaylightTime() 和daylightTimeOffset()。
bool QTimeZone::hasTransitions() const
如果系统后台支持获取转换,则返回true
。
转换是时区的变化:当 DST 启用或关闭时,以及当局改变时区偏移量时,都会发生转换。
此方法仅在启用timezone
功能时可用。
另请参阅 nextTransition()、previousTransition() 和transitions()。
[static]
QByteArray QTimeZone::ianaIdToWindowsId(const QByteArray &ianaId)
返回与给定ianaId 对应的 Windows ID。
此方法仅在启用timezone
功能时可用。
另请参阅 windowsIdToDefaultIanaId() 和windowsIdToIanaIds()。
QByteArray QTimeZone::id() const
返回时区的 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-偏移 ID:它对这些 ID 的处理等同于传递以秒为单位的相应偏移量,这与第一个例外情况相同。
在这两种例外情况下,如果存在具有指定偏移量的 IANA UTC 偏移区,所构建的实例就会使用该 IANA 区的 ID,尽管它可能与传递给构造函数的(非 IANA)UTC 偏移 ID 不同。否则,实例将使用根据偏移量合成的 ID,形式为 UTC±hh:mm:ss,省略任何表示零秒或零分的尾部 :00。同样,该 ID 可能与传递给构造函数的 UTC 偏移 ID 不同。
该方法仅在启用timezone
功能时可用。
bool QTimeZone::isDaylightTime(const QDateTime &atDateTime) const
如果在给定的atDateTime 时实行夏令时,则返回true
。
此方法仅在启用timezone
功能时可用。
另请参阅 hasDaylightTime() 和daylightTimeOffset()。
[static]
bool QTimeZone::isTimeZoneIdAvailable(const QByteArray &ianaId)
如果给定的时区ianaId 在本系统中可用,则返回true
。
这可能包括availableTimeZoneIds() 中未列出的一些非国际原子能机构 ID,特别是 UTC 偏移 ID。
此方法仅在启用timezone
功能时可用。
另请参阅 availableTimeZoneIds()。
[constexpr noexcept, since 6.5]
bool QTimeZone::isUtcOrFixedOffset() const
如果timeSpec() 为Qt::UTC 或Qt::OffsetFromUTC ,则返回true
。
为真时,时间描述不会随时间而改变,例如不会像本地时间或时区那样发生季节性夏令变化。了解了这一点,调用代码就不需要进行其他各种检查了。
此函数在 Qt 6.5 中引入。
[static constexpr noexcept, since 6.5]
bool QTimeZone::isUtcOrFixedOffset(Qt::TimeSpec spec)
如果spec 是Qt::UTC 或Qt::OffsetFromUTC ,则返回true
。
此函数在 Qt 6.5 中引入。
bool QTimeZone::isValid() const
如果该时区有效,则返回true
。
QTimeZone::OffsetData QTimeZone::nextTransition(const QDateTime &afterDateTime) const
返回给定afterDateTime 之后的第一个时区转换时间。当您有一个过渡时间,并希望找到它之后的过渡时间时,这将非常有用。
如果在给定的afterDateTime 之后没有过渡时间,那么将返回一个无效的OffsetData ,并以一个无效的QDateTime 作为其atUtc
。
给定的afterDateTime 是排他性的。
此方法仅在启用timezone
功能时可用。
另请参阅 hasTransitions()、previousTransition() 和transitions()。
QTimeZone::OffsetData QTimeZone::offsetData(const QDateTime &forDateTime) const
返回给定forDateTime 的有效偏移细节。
这等同于单独调用abbreviation() 和所有三个偏移函数,但可能更有效,并可能获得不同的缩写本地化。如果在给定的日期时间内没有这些数据,则将返回一个无效的OffsetData ,并以一个无效的QDateTime 作为其atUtc
。
此方法仅在启用timezone
功能时可用。
另请参阅 offsetFromUtc()、standardTimeOffset()、daylightTimeOffset() 和abbreviation()。
int QTimeZone::offsetFromUtc(const QDateTime &atDateTime) const
返回给定atDateTime 时的总有效偏移量,即在 UTC 基础上增加多少秒才能得到当地时间。这包括任何可能生效的 DST 偏移,即给定日期时间的standardTimeOffset() 和daylightTimeOffset() 之和。
例如,对于 "欧洲/柏林 "时区,标准时间偏移为 +3600 秒,DST 偏移为 +3600 秒。在标准时间期间,offsetFromUtc() 将返回 +3600 (UTC+01:00),而在 DST 期间,它将返回 +7200 (UTC+02:00)。
该方法仅在启用timezone
功能时可用。
另请参阅 standardTimeOffset() 和daylightTimeOffset()。
QTimeZone::OffsetData QTimeZone::previousTransition(const QDateTime &beforeDateTime) const
返回给定beforeDateTime 之前的第一个时区转换时间。当您有一个过渡时间,并希望找到它之前的过渡时间时,这将非常有用。
如果在给定的beforeDateTime 之前没有过渡时间,那么将返回一个无效的OffsetData ,并以一个无效的QDateTime 作为其atUtc
。
给定的beforeDateTime 是排他性的。
此方法仅在启用timezone
功能时可用。
另请参阅 hasTransitions()、nextTransition() 和transitions()。
int QTimeZone::standardTimeOffset(const QDateTime &atDateTime) const
返回给定atDateTime 的标准时间偏移量,即在 UTC 基础上增加多少秒才能得到当地标准时间。这不包括任何可能生效的 DST 偏移。
例如,"欧洲/柏林 "时区的标准时间偏移为 +3600 秒。在标准时间和 DST 期间,offsetFromUtc() 将返回 +3600(UTC+01:00)。
此方法仅在启用timezone
功能时可用。
另请参阅 offsetFromUtc() 和daylightTimeOffset()。
[noexcept]
void QTimeZone::swap(QTimeZone &other)
将该时区实例与other 互换。这一操作非常快速,从未出现过故障。
[static]
QTimeZone QTimeZone::systemTimeZone()
返回描述本地系统时间的QTimeZone 对象。
该方法仅在启用timezone
功能时可用。返回的实例通常等同于轻量级时间表示QTimeZone(QTimeZone::LocalTime)
,尽管是作为时区实现的。
返回的对象不会随系统时区的改变而改变。它代表的是调用asBackendZone() 时有效的本地时间。在配置错误的系统中,例如那些编译 Qt 时所依赖的后端缺乏时区数据的系统,返回的时间可能无效。在这种情况下,将输出警告。
另请参阅 utc(),Initialization,asBackendZone() 和systemTimeZoneId() 。
[static]
QByteArray QTimeZone::systemTimeZoneId()
返回当前系统时区 IANA ID。
等同于调用systemTimeZone().id() ,但可能会绕过一些计算来获取它。从返回的字节数组构造QTimeZone 将产生与systemTimeZone() 相同的结果。
如果后端无法确定正确的系统区域,则结果为空。在这种情况下,systemTimeZone().isValid() 为假,如果调用systemTimeZone() 或该方法,都会输出警告。
如果后端能确定正确的系统区,但不能确定其名称,则返回空字节数组。例如,在 Windows 系统中,系统本机 ID 会转换为 IANA ID,如果内部翻译代码不知道系统 ID,结果将为空。在这种情况下,systemTimeZone().isValid() 将为真。
此方法仅在启用timezone
功能时可用。
注: 在 Qt 6.7 之前,当无法确定结果时,会返回误导性结果 "UTC"。
另请参阅 systemTimeZone()。
[since 6.2]
QLocale::Territory QTimeZone::territory() const
返回时区的地域。
如果返回AnyTerritory ,则表示该时区没有已知的地域关联。在某些情况下,这可能是因为该时区没有关联的地区(例如 UTC),或者是因为该时区在多个地区使用(例如 CET)。在其他情况下,QTimeZone 后台可能不知道该区域与哪个地区相关联,例如,因为它不是所使用地区的主要区域。
此方法仅在启用timezone
功能时可用。
此功能在 Qt 6.2 中引入。
[constexpr noexcept, since 6.5]
Qt::TimeSpec QTimeZone::timeSpec() const
返回标识时间表示类型的Qt::TimeSpec 。
如果结果为Qt::TimeZone ,则时间描述为时区(由系统提供或标准数据支持);否则,时间描述为轻量级时间表示。如果结果为Qt::LocalTime ,则描述的是本地时间:详见Qt::TimeSpec 。
此函数在 Qt 6.5 中引入。
另请参阅 fixedSecondsAheadOfUtc() 和asBackendZone()。
CFTimeZoneRef QTimeZone::toCFTimeZone() const
从QTimeZone 创建 CFTimeZone。
调用者拥有 CFTimeZone 对象并负责释放它。
另请参阅 fromCFTimeZone() 。
NSTimeZone *QTimeZone::toNSTimeZone() const
从QTimeZone 创建一个 NSTimeZone。
NSTimeZone 对象将自动释放。
另请参阅 fromNSTimeZone().
QTimeZone::OffsetDataList QTimeZone::transitions(const QDateTime &fromDateTime, const QDateTime &toDateTime) const
返回给定日期之间所有时区转换的列表。
给定的fromDateTime 和toDateTime 包括在内。每个条目的atUtc
成员描述了转换的时刻,其他成员给出的偏移和缩写在该时刻生效。
此方法仅在启用timezone
功能时可用。
另请参阅 hasTransitions()、nextTransition() 和previousTransition()。
[static]
QTimeZone QTimeZone::utc()
返回描述 UTC 时区的QTimeZone 对象。
该方法仅在启用timezone
功能时可用。它等同于向QTimeZone (int offsetSeconds)和轻量级时间表示QTimeZone(QTimeZone::UTC) 传递 0,尽管与后者不同,它是作为时区实现的。
另请参阅 systemTimeZone(),Initialization, 和asBackendZone().
[static]
QByteArray QTimeZone::windowsIdToDefaultIanaId(const QByteArray &windowsId)
返回给定windowsId 的默认 IANA ID。
由于一个 Windows ID 可能涵盖多个不同地区的多个 IANA ID,因此该函数将返回最常用的 IANA ID,而不考虑地区,因此使用时应谨慎。通常情况下,最好申请特定地区的默认值。
此方法仅在启用timezone
功能时可用。
另请参阅 ianaIdToWindowsId() 和windowsIdToIanaIds()。
[static]
QByteArray QTimeZone::windowsIdToDefaultIanaId(const QByteArray &windowsId, QLocale::Territory territory)
返回给定windowsId 和territory 的默认 IANA ID。
由于一个 Windows ID 可能涵盖给定区域内的多个 IANA ID,因此将返回该区域内最常用的 IANA ID。
作为特例,AnyTerritory 返回那些与领土无关的 IANA ID 的默认值,而World 则返回给定windowsId 在与其无特定关联的领土中的默认值。
如果返回值为空,则表示该windowsId 没有特定于给定territory 的 IANA ID。在这种情况下,回到windowsIdToDefaultIanaId(windowsId)
是合理的。
此方法仅在启用timezone
功能时可用。
另请参阅 ianaIdToWindowsId()、windowsIdToIanaIds() 和territory()。
[static]
QList<QByteArray> QTimeZone::windowsIdToIanaIds(const QByteArray &windowsId)
返回给定windowsId 的所有 IANA ID。
返回的列表按字母顺序排序。
此方法仅在启用timezone
功能时可用。
另请参阅 ianaIdToWindowsId() 和windowsIdToDefaultIanaId()。
[static]
QList<QByteArray> QTimeZone::windowsIdToIanaIds(const QByteArray &windowsId, QLocale::Territory territory)
返回给定windowsId 和territory 的所有 IANA ID。
作为特例,AnyTerritory 选择那些与领土无关的 IANA ID,而World 则选择与给定windowsId 无关的领土的默认 IANA ID。
返回的列表按使用频率排序,即先列出领土内较大的区域。
此方法仅在启用timezone
功能时可用。
另请参阅 ianaIdToWindowsId()、windowsIdToDefaultIanaId() 和territory()。
[noexcept]
QTimeZone &QTimeZone::operator=(QTimeZone &&other)
Move-assignsother 至QTimeZone 实例,将其数据所有权转移至该实例。
QTimeZone &QTimeZone::operator=(const QTimeZone &other)
赋值操作符,将other 赋值给此变量。
成员变量文档
const int QTimeZone::MaxUtcOffsetSecs
与世界协调时的时区偏移量预计不会高于此值。
21 世纪初的时区中,UTC 偏移量最大的是 +14 小时(圣诞岛、基里巴斯、基里蒂马蒂),即格林尼治以东 14 小时。
历史上,在 1867 年俄罗斯将阿拉斯加出售给美国之前,阿拉斯加与俄罗斯使用相同的日期,因此在格林威治以东偏移超过 15 个小时。由于阿拉斯加使用的是当地的太阳平均时,其偏差各不相同,但都小于格林威治以东 16 小时。
另请参见 MinUtcOffsetSecs 。
const int QTimeZone::MinUtcOffsetSecs
与世界协调时的时区偏移量预计不会低于此值。
在 21 世纪初的任何时区中,UTC 的最低偏移量为-12 小时(美国贝克岛),即格林威治以西 12 小时。
从历史上看,直到 1844 年,菲律宾(当时由西班牙控制)一直使用与西班牙美洲领地相同的日期,因此偏移量接近格林威治以西 16 小时。由于菲律宾使用的是当地的太阳平均时,它的一些外围领土有可能在格林威治以西 16 小时以上的时间运行,但 21 世纪早期没有任何一个时区的历史可以追溯到如此极端的时间。
另请参见 MaxUtcOffsetSecs 。
相关非会员
[noexcept]
bool operator!=(const QTimeZone &lhs, const QTimeZone &rhs)
如果lhs 时区不等于rhs 时区,则返回true
。
如果两个表示法的内部描述不同,即使它们对所有时间时刻的表示一致,也是不同的。特别是,轻量级时间表示法可能与时区一致,但两者并不相等。
[noexcept]
bool operator==(const QTimeZone &lhs, const QTimeZone &rhs)
如果lhs 时区等于rhs 时区,则返回true
。
如果两个表示法的内部描述不同,即使它们对所有时间时刻的表示一致,也是不同的。特别是,轻量级时间表示法可能与时区一致,但两者并不相等。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.