- 所有已实现的接口:
-
Serializable
,Cloneable
- 直接已知的子类:
-
SimpleTimeZone
TimeZone
表示一个时区偏移,并且可以计算夏令时。
通常,您可以使用 getDefault
来获取一个 TimeZone
,它会基于程序运行的时区创建一个 TimeZone
。例如,在日本运行的程序中,getDefault
会创建一个基于日本标准时间的 TimeZone
对象。
您也可以使用 getTimeZone
以及一个时区ID来获取一个 TimeZone
。例如,美国太平洋时区的时区ID是 "America/Los_Angeles"。因此,您可以通过以下方式获取一个美国太平洋时区的 TimeZone
对象:
您可以使用TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
getAvailableIDs
方法遍历所有支持的时区ID。然后,您可以选择一个支持的ID来获取一个 TimeZone
。如果您想要的时区没有被支持的ID表示,那么可以指定一个自定义的时区ID 来生成一个 TimeZone。自定义时区ID 的语法是:
Hours 必须在 0 到 23 之间,Minutes/Seconds 必须在 00 到 59 之间。例如,"GMT+10" 和 "GMT+0010" 分别表示比 GMT 提前十小时和十分钟。CustomID:GMT
Sign Hours:
Minutes:
SecondsGMT
Sign Hours:
MinutesGMT
Sign Hours MinutesGMT
Sign Hours Sign: 其中之一+ -
Hours: Digit Digit Digit Minutes: Digit Digit Seconds: Digit Digit Digit: 其中之一0 1 2 3 4 5 6 7 8 9
该格式与语言环境无关,数字必须取自 Unicode 标准的基本拉丁区块。自定义时区ID 不能指定夏令时转换计划。如果指定的字符串不符合语法,将使用 "GMT"
。
在创建 TimeZone
时,指定的自定义时区ID 会被规范化为以下语法:
例如,TimeZone.getTimeZone("GMT-8").getID() 返回 "GMT-08:00"。只有在秒值非零时,ColonSeconds 部分才会出现。NormalizedCustomID:GMT
Sign TwoDigitHours:
Minutes [ColonSeconds] Sign: 其中之一+ -
TwoDigitHours: Digit Digit Minutes: Digit Digit ColonSeconds::
Digit Digit Digit: 其中之一0 1 2 3 4 5 6 7 8 9
三字母时区ID
为了与 JDK 1.1.x 兼容,还支持一些其他三字母时区ID(例如 "PST"、"CTT"、"AST")。然而,它们的使用已被弃用,因为同一缩写通常用于多个时区(例如,"CST" 可能是美国的 "中部标准时间" 和中国的 "中国标准时间"),此时 Java 平台只能识别其中一个。- 自 JDK 版本:
- 1.1
- 参见:
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionclone()
创建此TimeZone
的副本。static String[]
获取所有支持的可用ID。static String[]
getAvailableIDs
(int rawOffset) 根据给定的毫秒级时区偏移获取可用的ID。static TimeZone
获取 Java 虚拟机的默认TimeZone
。final String
返回适合在默认语言环境中向用户展示的此TimeZone
的长标准时间名称。final String
getDisplayName
(boolean daylight, int style) 返回适合在默认语言环境中向用户展示的此TimeZone
的指定样式的名称。getDisplayName
(boolean daylight, int style, Locale locale) 返回适合在指定语言环境中向用户展示的此TimeZone
的指定样式的名称。final String
getDisplayName
(Locale locale) 返回适合在指定语言环境中向用户展示的此TimeZone
的长标准时间名称。int
返回要添加到本地标准时间以获取本地壁钟时间的时间量。getID()
获取此时区的ID。abstract int
getOffset
(int era, int year, int month, int day, int dayOfWeek, int milliseconds) 获取当前日期的时区偏移,如果存在夏令时,则进行修改。int
getOffset
(long date) 返回指定日期时此时区与 UTC 的偏移。abstract int
返回以毫秒为单位的时间量,以将 UTC 添加到此时区的标准时间。static TimeZone
getTimeZone
(String ID) 获取给定ID的TimeZone
。static TimeZone
getTimeZone
(ZoneId zoneId) 获取给定zoneId
的TimeZone
。boolean
hasSameRules
(TimeZone other) 如果此时区具有与另一个时区相同的规则和偏移,则返回 true。abstract boolean
inDaylightTime
(Date date) 查询给定的date
是否处于此时区的夏令时。boolean
如果此TimeZone
当前处于夏令时,或者将来任何时间从标准时间转换为夏令时,则返回true
。static void
setDefault
(TimeZone zone) 设置由getDefault
方法返回的TimeZone
。void
设置时区ID。abstract void
setRawOffset
(int offsetMillis) 将此TimeZone
对象转换为ZoneId
。toZoneId()
查询此TimeZone
是否使用夏令时。abstract boolean
用于getDisplayName()
的样式说明符,表示短名称,例如 "PST"。
-
Field Details
-
SHORT
public static final int SHORTA style specifier forgetDisplayName()
indicating a short name, such as "PST."- 自 JDK 版本:
- 1.2
- 参见:
-
LONG
public static final int LONG用于getDisplayName()
的样式说明符,表示长名称,例如 "太平洋标准时间"。- 自 JDK 版本:
- 1.2
- 参见:
-
-
Constructor Details
-
TimeZone
public TimeZone()唯一构造函数。(通常由子类构造函数隐式调用。)
-
-
Method Details
-
getOffset
public abstract int getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds) 获取当前日期的时区偏移,如果存在夏令时,则进行修改。这是要添加到 UTC 以获取本地时间的偏移量。如果底层的
TimeZone
实现子类支持历史夏令时计划和 GMT 偏移更改,则此方法返回历史上正确的偏移。- 参数:
-
era
- 给定日期的纪元。 -
year
- 给定日期的年份。 -
month
- 给定日期的月份。月份从 0 开始计数。例如,1 代表一月。 -
day
- 给定日期的当月日期。 -
dayOfWeek
- 给定日期的星期几。 -
milliseconds
- 标准本地时间中的一天中的毫秒数。 - 返回:
- 要添加到 GMT 以获取本地时间的毫秒数偏移量。
- 参见:
-
getOffset
public int getOffset(long date) 返回指定日期时此时区与 UTC 的偏移。如果指定日期时夏令时生效,则偏移值会根据夏令时的时间调整。如果底层的
TimeZone
实现子类支持历史夏令时计划和 GMT 偏移更改,则此方法返回历史上正确的偏移值。- 参数:
-
date
- 自 1970 年 1 月 1 日 00:00:00 GMT 以来表示的日期的毫秒数 - 返回:
- 要添加到 UTC 以获取本地时间的毫秒数时间量。
- 自 JDK 版本:
- 1.4
- 参见:
-
setRawOffset
public abstract void setRawOffset(int offsetMillis) 将基本时区偏移设置为 GMT。这是要添加到 UTC 以获取本地时间的偏移量。如果底层的
TimeZone
实现子类支持历史 GMT 偏移更改,则指定的 GMT 偏移将设置为最新的 GMT 偏移,并且将使用已知最新 GMT 偏移值与所有历史 GMT 偏移值的差异来调整。- 参数:
-
offsetMillis
- 要添加到 GMT 以获取本地时间的基本时区偏移。
-
getRawOffset
public abstract int getRawOffset()返回以毫秒为单位的时间量,以将 UTC 添加到此时区的标准时间。因为此值不受夏令时的影响,所以称为 原始偏移。如果底层的
TimeZone
实现子类支持历史 GMT 偏移更改,则该方法返回当前日期的原始偏移值。例如,在檀香山,其原始偏移在 1947 年从 GMT-10:30 更改为 GMT-10:00,此方法始终返回 -36000000 毫秒(即 -10 小时)。- 返回值:
- 要添加到UTC的原始偏移时间量(以毫秒为单位)。
- 参见:
-
getID
获取此时区的ID。- 返回值:
- 此时区的ID。
-
setID
设置时区ID。这不会更改时区对象中的任何其他数据。- 实现要求:
-
如果
ID
为null
,默认实现会抛出NullPointerException
。 - 参数:
-
ID
- 新的时区ID。 - 抛出:
-
NullPointerException
- 如果ID
为null
,此方法可能会抛出NullPointerException
。
-
getDisplayName
返回此TimeZone
的长标准时间名称,适合在默认区域设置中向用户展示。此方法等效于:
getDisplayName(false,
LONG
, Locale.getDefault(Locale.Category.DISPLAY
));- 返回值:
- 此时区在默认区域设置中的可读名称。
- 自 JDK 版本:
- 1.2
- 参见:
-
getDisplayName
- 参数:
-
locale
- 提供显示名称的区域设置。 - 返回值:
- 此时区在给定区域设置中的可读名称。
- 抛出:
-
NullPointerException
- 如果locale
为null
。 - 自 JDK 版本:
- 1.2
- 参见:
-
getDisplayName
返回此TimeZone
的指定style
的名称,适合在默认区域设置中向用户展示。如果指定的daylight
为true
,则返回夏令时名称(即使此TimeZone
不遵守夏令时)。否则,返回标准时间名称。此方法等效于:
getDisplayName(daylight, style, Locale.getDefault(
Locale.Category.DISPLAY
));- 参数:
-
daylight
- 指定夏令时名称为true
,或指定标准时间名称为false
-
style
-LONG
或SHORT
- 返回值:
- 此时区在默认区域设置中的可读名称。
- 抛出:
-
IllegalArgumentException
- 如果style
无效。 - 自 JDK 版本:
- 1.2
- 参见:
-
getDisplayName
返回此TimeZone
的指定style
的名称,适合在指定的locale
中向用户展示。如果指定的daylight
为true
,则返回夏令时名称(即使此TimeZone
不遵守夏令时)。否则,返回标准时间名称。在查找时区名称时,使用从指定
locale
派生的默认Locale
搜索路径。(不执行回退Locale
搜索。)如果在搜索路径的任何Locale
中(包括Locale.ROOT
)找到时区名称,则返回该名称。否则,返回规范化的自定义ID格式的字符串。- 实现要求:
-
如果
style
无效,或者ID
为null
,默认实现会抛出IllegalArgumentException
。 - 参数:
-
daylight
- 指定夏令时名称为true
,或指定标准时间名称为false
-
style
-LONG
或SHORT
-
locale
- 提供显示名称的区域设置。 - 返回值:
- 此时区在给定区域设置中的可读名称。
- 抛出:
-
IllegalArgumentException
- 如果style
无效,此方法可能会抛出IllegalArgumentException
。 -
NullPointerException
- 如果ID
为null
,此方法可能会抛出NullPointerException
。 - 自 JDK 版本:
- 1.2
- 参见:
-
getDSTSavings
public int getDSTSavings()返回要添加到本地标准时间以获取本地挂钟时间的时间量。如果调用
useDaylightTime()
返回true
,默认实现将返回3600000毫秒(即一小时)。否则,返回0(零)。如果底层
TimeZone
实现子类支持历史和未来的夏令时时间表更改,此方法将返回最后已知的夏令时规则的节约时间,可能是未来的预测。如果需要在任何给定时间戳的节约时间量,请使用带有此
TimeZone
和时间戳的Calendar
构造,并调用Calendar.get
(
Calendar.DST_OFFSET
)
。- 返回值:
- 节约时间的毫秒数
- 自 JDK 版本:
- 1.4
- 参见:
-
useDaylightTime
public abstract boolean useDaylightTime()查询此TimeZone
是否使用夏令时。如果底层
TimeZone
实现子类支持历史和未来的夏令时时间表更改,此方法指的是最后已知的夏令时规则,可能是未来的预测,可能与当前规则不同。如果应考虑当前规则,考虑调用observesDaylightTime()
。- 返回值:
-
如果此
TimeZone
使用夏令时,则为true
,否则为false
。 - 参见:
-
observesDaylightTime
public boolean observesDaylightTime()如果此TimeZone
当前处于夏令时,或者将来的任何时间从标准时间转换为夏令时,则返回true
。默认实现如果
useDaylightTime()
或inDaylightTime(new Date())
返回true
,则返回true
。- 返回值:
-
如果此
TimeZone
当前处于夏令时,或者将来的任何时间从标准时间转换为夏令时,则返回true
;否则返回false
。 - 自 JDK 版本:
- 1.7
- 参见:
-
inDaylightTime
查询给定的date
是否在该时区的夏令时中。- 参数:
-
date
- 给定的日期。 - 返回:
-
如果给定的日期在夏令时中,则返回
true
,否则返回false
。 - 抛出:
-
NullPointerException
- 如果date
为null
,则此方法可能会抛出NullPointerException
。
-
getTimeZone
获取给定ID的TimeZone
。- 参数:
-
ID
- 一个TimeZone
的ID,可以是缩写,如"PST",全名,如"America/Los_Angeles",或自定义ID,如"GMT-8:00"。请注意,对缩写的支持仅用于与JDK 1.1.x的兼容性,应使用全名。 - 返回:
-
指定的
TimeZone
,如果给定的ID无法理解,则返回GMT时区。 - 抛出:
-
NullPointerException
- 如果ID
为null
。
-
getTimeZone
获取给定zoneId
的TimeZone
。- 参数:
-
zoneId
- 从中获取时区ID的ZoneId
- 返回:
-
指定的
TimeZone
,如果给定的ID无法理解,则返回GMT时区。 - 抛出:
-
NullPointerException
- 如果zoneId
为null
。 - 自Java版本:
- 1.8
-
toZoneId
将此TimeZone
对象转换为ZoneId
。- 返回:
-
表示与此
TimeZone
相同时区的ZoneId
。 - 自Java版本:
- 1.8
-
getAvailableIDs
根据给定的毫秒级时区偏移量获取可用的ID。- 参数:
-
rawOffset
- 给定的时区GMT偏移量(以毫秒为单位)。 - 返回:
- 一个ID数组,其中该ID的时区具有指定的GMT偏移量。例如,"America/Phoenix"和"America/Denver"都具有GMT-07:00,但在夏令时行为上有所不同。
- 参见:
-
getAvailableIDs
获取所有支持的可用ID。- 返回:
- 一个ID数组。
-
getDefault
获取Java虚拟机的默认TimeZone
。如果缓存的默认TimeZone
可用,则返回其克隆。否则,该方法将采取以下步骤来确定默认时区。- 如果可用,使用
user.timezone
属性值作为默认时区ID。 - 检测平台时区ID。平台时区和ID映射的来源可能因实现而异。
- 如果给定或检测到的时区ID未知,则使用
GMT
作为最后手段。
从ID创建的默认
TimeZone
被缓存,并返回其克隆。返回时,user.timezone
属性值设置为该ID。- 返回:
-
默认
TimeZone
。 - 参见:
- 如果可用,使用
-
setDefault
设置由getDefault
方法返回的TimeZone
。zone
被缓存。如果zone
为null,则清除缓存的默认TimeZone
。此方法不会更改user.timezone
属性的值。- 参数:
-
zone
- 新的默认TimeZone
,或null - 抛出:
-
SecurityException
- 如果安全管理器的checkPermission
拒绝PropertyPermission("user.timezone", "write")
- 参见:
-
hasSameRules
如果此时区具有与另一个时区相同的规则和偏移量,则返回true。也就是说,如果此时区仅在ID上有所不同,则返回false。如果另一个时区为null,则返回false。- 参数:
-
other
- 要与之比较的TimeZone
对象 - 返回:
- 如果另一个时区不为null且与此时区相同(可能除了ID外),则返回true
- 自Java版本:
- 1.2
-
clone
创建此TimeZone
的副本。
-