TimeZone
java.lang.Object
|—java.util.TimeZone
public abstract class TimeZone
extends Object
implements Serializable, Cloneable
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 的语法是:
CustomID:
GMT Sign Hours : Minutes
GMT Sign Hours Minutes
GMT Sign Hours
Sign: one of
+ -
Hours:
Digit
Digit Digit
Minutes:
Digit Digit
Digit: one of
0 1 2 3 4 5 6 7 8 9
小时必须介于 0 到 23 之间,分钟必须介于 00 到 59 之间。例如,“GMT+10”和“GMT+0010”分别表示比 GMT 提前十小时和十分钟。
格式与区域无关,数字必须取自 Unicode 标准的基本拉丁语块。 不能使用自定义时区 ID 指定夏令时转换计划。 如果指定的字符串与语法不匹配,则使用“GMT”。
创建 TimeZone 时,指定的自定义时区 ID 以以下语法规范化:
NormalizedCustomID:
GMT Sign TwoDigitHours : Minutes
Sign: one of
+ -
TwoDigitHours:
Digit Digit
Minutes:
Digit Digit
Digit: one of
0 1 2 3 4 5 6 7 8 9
例如,TimeZone.getTimeZone(“GMT-8”).getID() 返回“GMT-08:00”。 三字母时区 ID 为了与 JDK 1.1.x 兼容,还支持其他一些三字母时区 ID(例如“PST”、“CTT”、“AST”)。 但是,不推荐使用它们,因为相同的缩写通常用于多个时区(例如,“CST”可能是美国“中部标准时间”和“中国标准时间”),Java 平台只能识别其中之一 他们。
字段摘要
修饰符和类型 | 字段 | 描述 |
---|---|---|
static int | LONG | getDisplayName() 的样式说明符,指示长名称,例如“太平洋标准时间”。 |
static int | SHORT | getDisplayName() 的样式说明符,指示短名称,例如“PST”。 |
构造函数摘要
构造函数 | 描述 |
---|---|
TimeZone() | 唯一的构造函数 |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
Object | clone() | 创建此 TimeZone 的副本。 |
static String[] | getAvailableIDs() | 获取支持的所有可用 ID。 |
static String[] | getAvailableIDs(int rawOffset) | 根据给定的时区偏移量获取可用的 ID,以毫秒为单位。 |
static TimeZone | getDefault() | 获取 Java 虚拟机的默认时区。 |
String | getDisplayName() | 返回此 TimeZone 的长标准时间名称,适合在默认语言环境中呈现给用户。 |
String | getDisplayName(boolean daylight, int style) | 返回此 TimeZone 的指定样式的名称,该名称适合在默认语言环境中呈现给用户。 |
String | getDisplayName(boolean daylight, int style, Locale locale) | 返回此 TimeZone 的指定样式的名称,该名称适合在指定区域设置中呈现给用户。 |
String | getDisplayName(Locale locale) | 返回此 TimeZone 的长标准时间名称,适合在指定区域设置中呈现给用户。 |
int | getDSTSavings() | 返回要添加到本地标准时间以获取本地挂钟时间的时间量。 |
String | getID() | 获取该时区的 ID。 |
abstract int | getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds) | 获取当前日期的时区偏移量,在夏令时的情况下进行修改。 |
int | getOffset(long date) | 返回此时区在指定日期与 UTC 的偏移量。 |
abstract int | getRawOffset() | 返回添加到 UTC 以获取此时区的标准时间的时间量(以毫秒为单位)。 |
static TimeZone | getTimeZone(String ID) | 获取给定 ID 的时区。 |
static TimeZone | getTimeZone(ZoneId zoneId) | 获取给定 zoneId 的 TimeZone。 |
boolean | hasSameRules(TimeZone other) | 如果此区域与另一个区域具有相同的规则和偏移量,则返回 true。 |
abstract boolean | inDaylightTime(Date date) | 查询给定日期是否在该时区的夏令时。 |
boolean | observesDaylightTime() | 如果此 TimeZone 当前处于夏令时,或者如果在将来的任何时间发生从标准时间到夏令时的转换,则返回 true。 |
static void | setDefault(TimeZone zone) | 设置由 getDefault 方法返回的 TimeZone。 |
void | setID(String ID) | 设置时区 ID。 |
abstract void | setRawOffset(int offsetMillis) | 将基准时区偏移设置为 GMT。 |
ZoneId | toZoneId() | 将此 TimeZone 对象转换为 ZoneId。 |
abstract boolean | useDaylightTime() | 查询此 TimeZone 是否使用夏令时。 |
从类 java.lang.Object 继承的方法 |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息
LONG
public static final int LONG
getDisplayName() 的样式说明符,指示长名称,例如“太平洋标准时间”。
SHORT
public static final int SHORT
getDisplayName() 的样式说明符,指示短名称,例如“PST”。
构造函数详细信息
TimeZone
public TimeZone()
唯一的构造函数。 (用于子类构造函数的调用,通常是隐式的。)
方法详情
getOffset
public abstract int getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds)
获取当前日期的时区偏移量,在夏令时的情况下进行修改。 这是添加到 UTC 以获取本地时间的偏移量。
如果基础 TimeZone 实现子类支持历史夏令时时间表和 GMT 偏移更改,则此方法返回历史正确偏移。
参数:
参数名称 | 参数描述 |
---|---|
era | 给定日期的时代。 |
year | 给定日期的年份。 |
month | 给定日期的月份。 月份是从 0 开始的。 例如,0 表示一月。 |
day | 给定日期的月份中的某一天。 |
dayOfWeek | 给定日期的星期几。 |
milliseconds | 标准本地时间的毫秒数。 |
返回:
添加到 GMT 以获取本地时间的偏移量(以毫秒为单位)。
getOffset
public int getOffset(long date)
返回此时区在指定日期与 UTC 的偏移量。 如果夏令时在指定日期生效,则偏移值会根据夏令时进行调整。
如果基础 TimeZone 实现子类支持历史夏令时时间表和 GMT 偏移更改,则此方法返回历史正确偏移值。
参数:
参数名称 | 参数描述 |
---|---|
date | 自 1970 年 1 月 1 日 00:00:00 GMT 以来以毫秒为单位的日期 |
返回:
添加到 UTC 以获取本地时间的时间量(以毫秒为单位)。
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
public String getID()
获取该时区的 ID。
返回:
这个时区的ID。
setID
public void setID(String ID)
设置时区 ID。 这不会更改时区对象中的任何其他数据。
参数:
参数名称 | 参数描述 |
---|---|
ID | 新时区 ID。 |
getDisplayName
public final String getDisplayName()
返回此 TimeZone 的长标准时间名称,适合在默认语言环境中呈现给用户。
该方法等价于:
getDisplayName(false, LONG,
Locale.getDefault(Locale.Category#DISPLAY))
返回:
此时区在默认语言环境中的可读名称。
getDisplayName
public final String getDisplayName(Locale locale)
返回此 TimeZone 的长标准时间名称,适合在指定区域设置中呈现给用户。
该方法等价于:
getDisplayName(false, LONG, locale)
参数:
参数名称 | 参数描述 |
---|---|
locale | 提供显示名称的语言环境。 |
返回:
此时区在给定语言环境中的可读名称。
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果 locale 为空 |
getDisplayName
public final String getDisplayName(boolean daylight, int style)
返回此 TimeZone 的指定样式的名称,该名称适合在默认语言环境中呈现给用户。 如果指定的日光为真,则返回夏令时名称(即使此 TimeZone 不遵守夏令时)。 否则,返回标准时间名称。
该方法等价于:
getDisplayName(daylight, style,
Locale.getDefault(Locale.Category#DISPLAY))
参数:
参数名称 | 参数描述 |
---|---|
daylight | true 指定夏令时名称,或 false 指定标准时间名称 |
style | 长或短 |
返回:
此时区在默认语言环境中的可读名称。
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 style 无效 |
getDisplayName
public String getDisplayName(boolean daylight, int style, Locale locale)
返回此 TimeZone 的指定样式的名称,该名称适合在指定区域设置中呈现给用户。 如果指定的日光为真,则返回夏令时名称(即使此 TimeZone 不遵守夏令时)。 否则,返回标准时间名称。
查找时区名称时,使用从指定语言环境派生的 ResourceBundle.Control#getCandidateLocales(String,Locale)。 (不执行 ResourceBundle.Control#getFallbackLocale(String,Locale) 搜索。)如果在搜索路径的任何 Locale 中找到时区名称,包括 Locale#ROOT,则返回该名称。 否则,返回标准化自定义 ID 格式的字符串。
参数:
参数名称 | 参数描述 |
---|---|
daylight | true 指定夏令时名称,或 false 指定标准时间名称 |
style | 长或短 |
locale | 提供显示名称的语言环境。 |
返回:
此时区在给定语言环境中的可读名称。
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 style 无效 |
NullPointerException | 如果 locale 为空 |
getDSTSavings
public int getDSTSavings()
返回要添加到本地标准时间以获取本地挂钟时间的时间量。
如果对 useDaylightTime() 的调用返回 true,则默认实现返回 3600000 毫秒(即一小时)。 否则,返回 0(零)。
如果底层 TimeZone 实现子类支持历史和未来夏令时计划更改,则此方法返回可以作为未来预测的最后一个已知夏令时规则的节省时间量。
如果需要任何给定时间戳的节省时间量,请使用此 TimeZone 和时间戳构造一个日历,并调用 Calendar#get(int)(Calendar#DST_OFFSET)。
返回:
以毫秒为单位的节省时间
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。
inDaylightTime
public abstract boolean inDaylightTime(Date date)
查询给定日期是否在该时区的夏令时。
参数:
参数名称 | 参数描述 |
---|---|
date | 给定的日期。 |
返回:
如果给定日期在夏令时,则为 true,否则为 false。
getTimeZone
public static TimeZone getTimeZone(String ID)
获取给定 ID 的时区。
参数:
参数名称 | 参数描述 |
---|---|
ID | TimeZone 的 ID,可以是“PST”等缩写、“America/Los_Angeles”等全名或“GMT-8:00”等自定义 ID。 请注意,支持缩写仅是为了兼容 JDK 1.1.x,应使用全名。 |
返回:
指定的时区,如果无法理解给定的 ID,则为 GMT 时区。
getTimeZone
public static TimeZone getTimeZone(ZoneId zoneId)
获取给定 zoneId 的 TimeZone。
参数:
参数名称 | 参数描述 |
---|---|
zoneId | 从中获取时区 ID 的 ZoneId |
返回:
指定的时区,如果无法理解给定的 ID,则为 GMT 时区。
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果 zoneId 为空 |
toZoneId
public ZoneId toZoneId()
将此 TimeZone 对象转换为 ZoneId。
返回:
表示与此 TimeZone 相同时区的 ZoneId
getAvailableIDs
public static String[] getAvailableIDs(int rawOffset)
根据给定的时区偏移量获取可用的 ID,以毫秒为单位。
参数:
参数名称 | 参数描述 |
---|---|
rawOffset | 给定的时区 GMT 偏移量(以毫秒为单位)。 |
返回:
一个 ID 数组,其中该 ID 的时区具有指定的 GMT 偏移量。 例如,“America/Phoenix”和“America/Denver”都有 GMT-07:00,但夏令时行为不同。
getAvailableIDs
public static String[] getAvailableIDs()
获取支持的所有可用 ID。
返回:
一个 ID 数组。
getDefault
public static TimeZone getDefault()
获取 Java 虚拟机的默认时区。 如果缓存的默认 TimeZone 可用,则返回其克隆。 否则,该方法采取以下步骤来确定默认时区。
- 使用 user.timezone 属性值作为默认时区 ID(如果可用)。
- 检测平台时区 ID。 平台时区和 ID 映射的来源可能因实现而异。
- 如果给定或检测到的时区 ID 未知,则使用 GMT 作为最后的手段。
从 ID 创建的默认 TimeZone 被缓存,并返回其克隆。 user.timezone 属性值在返回时设置为 ID。
返回:
默认时区
setDefault
public static void setDefault(TimeZone zone)
设置由 getDefault 方法返回的 TimeZone。 区域被缓存。 如果 zone 为 null,则清除缓存的默认 TimeZone。 此方法不会更改 user.timezone 属性的值。
参数:
参数名称 | 参数描述 |
---|---|
zone | 新的默认时区,或 null |
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | 如果安全管理器的 checkPermission 拒绝 PropertyPermission(“user.timezone”, “write”) |
hasSameRules
public boolean hasSameRules(TimeZone other)
如果此区域与另一个区域具有相同的规则和偏移量,则返回 true。 也就是说,如果该区域仅在 ID 上有所不同,如果有的话。 如果其他区域为空,则返回 false。
参数:
参数名称 | 参数描述 |
---|---|
other | 要与之比较的 TimeZone 对象 |
返回:
如果另一个区域不为空且与此区域相同,则为 true,ID 可能除外
clone
public Object clone()
创建此 TimeZone 的副本。
覆盖:
在类 Object 中克隆
返回:
此 TimeZone 的克隆