模块 java.base
 java.util

类 TimeZone

java.lang.Object
java.util.TimeZone
所有已实现的接口:
Serializable , Cloneable
已知子类:
SimpleTimeZone

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 : Seconds
     GMT Sign Hours : Minutes
     GMT Sign Hours Minutes
     GMT Sign Hours
 Sign: one of
     + - 
 Hours:
     Digit
     Digit Digit
 Minutes:
     Digit Digit
 Seconds:
     Digit Digit
 Digit: one of
     0 1 2 3 4 5 6 7 8 9 
 
小时必须介于 0 到 23 之间分钟/必须在 00 到 59 之间。例如,“GMT+10”和“GMT+0010”分别表示比 GMT 早 10 小时和 10 分钟。

格式与locale无关,数字必须取自 Unicode 标准的基本拉丁语块。不能使用自定义时区 ID 指定夏令时转换计划。如果指定的字符串与语法不匹配,则使用 "GMT"

创建 TimeZone 时,指定的自定义时区 ID 以以下语法规范化:

 NormalizedCustomID:
     GMT Sign TwoDigitHours : Minutes [ColonSeconds]
 Sign: one of
     + - 
 TwoDigitHours:
     Digit Digit
 Minutes:
     Digit Digit
 ColonSeconds:
     : Digit Digit
 Digit: one of
     0 1 2 3 4 5 6 7 8 9 
 
例如,TimeZone.getTimeZone("GMT-8").getID() 返回“GMT-08:00”。ColonSeconds部分仅在秒值不为零时出现。

三字母时区 ID

为了与 JDK 1.1.x 兼容,还支持其他一些三字母时区 ID(例如“PST”、“CTT”、“AST”)。但是,their use is deprecated因为同一个缩写经常用于多个时区(例如,“CST”可能是美国的“Central Standard Time”和“China Standard Time”),Java 平台只能识别其中一个。
自从:
1.1
参见:
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    static final int
    getDisplayName() 的样式说明符,指示长名称,例如“太平洋标准时间”。
    static final int
    getDisplayName() 的样式说明符,指示短名称,例如“PST”。
  • 构造方法总结

    构造方法
    构造方法
    描述
    唯一的构造方法。
  • 方法总结

    修饰符和类型
    方法
    描述
    创建此 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 的指定 style 中的名称,适合在默认locale中向用户展示。
    getDisplayName(boolean daylight, int style, Locale locale)
    返回此 TimeZone 的指定 style 中适合呈现给指定 locale 中的用户的名称。
    final String
    返回此 TimeZone 的长标准时间名称,适合在指定的 locale 中呈现给用户。
    int
    返回要添加到本地标准时间以获得本地挂钟时间的时间量。
    获取该时区的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
    获取给定 ID 的 TimeZone
    static TimeZone
    获取给定 zoneIdTimeZone
    boolean
    如果此区域与另一个区域具有相同的规则和偏移量,则返回 true。
    abstract boolean
    查询给定的 date 是否处于该时区的夏令时。
    boolean
    如果此 TimeZone 当前处于夏令时,或者如果在未来任何时间发生从标准时间到夏令时的转换,则返回 true
    static void
    设置由 getDefault 方法返回的 TimeZone
    void
    设置时区 ID。
    abstract void
    setRawOffset(int offsetMillis)
    将基准时区偏移量设置为 GMT。
    将此 TimeZone 对象转换为 ZoneId
    abstract boolean
    查询此 TimeZone 是否使用夏令时。

    在类 java.lang.Object 中声明的方法

    equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 字段详细信息

    • SHORT

      public static final int SHORT
      getDisplayName() 的样式说明符,指示短名称,例如“PST”。
      自从:
      1.2
      参见:
    • LONG

      public static final int LONG
      getDisplayName() 的样式说明符,指示长名称,例如“太平洋标准时间”。
      自从:
      1.2
      参见:
  • 构造方法详细信息

    • 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 - 当地时间 standard 中一天中的毫秒数。
      返回:
      添加到 GMT 以获取当地时间的偏移量(以毫秒为单位)。
      参见:
    • getOffset

      public int getOffset(long date)
      返回指定日期时区与 UTC 的偏移量。如果夏令时在指定日期生效,则偏移值会根据夏令时的长短进行调整。

      如果底层 TimeZone 实现子类支持历史夏令时计划和 GMT 偏移更改,则此方法返回历史上正确的偏移值。

      参数:
      date - 自格林威治标准时间 1970 年 1 月 1 日 00:00:00 以来以毫秒表示的日期
      返回:
      添加到 UTC 以获取本地时间的时间量(以毫秒为单位)。
      自从:
      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

      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 ))
       
      返回:
      默认locale中此时区的人类可读名称。
      自从:
      1.2
      参见:
    • getDisplayName

      public final String  getDisplayName(Locale  locale)
      返回此 TimeZone 的长标准时间名称,适合在指定的 locale 中呈现给用户。

      此方法等效于:

       getDisplayName(false, LONG , locale)
       
      参数:
      locale - 提供显示名称的locale。
      返回:
      给定locale中此时区的人类可读名称。
      抛出:
      NullPointerException - 如果 localenull
      自从:
      1.2
      参见:
    • getDisplayName

      public final String  getDisplayName(boolean daylight, int style)
      返回此 TimeZone 的指定 style 中的名称,适合在默认locale中向用户展示。如果指定的 daylighttrue ,则返回夏令时名称(即使此 TimeZone 不遵守夏令时)。否则,返回标准时间名称。

      此方法等效于:

       getDisplayName(daylight, style,
              Locale.getDefault(Locale.Category.DISPLAY ))
       
      参数:
      daylight - true 指定夏令时名称,或 false 指定标准时间名称
      style - LONG SHORT
      返回:
      默认locale中此时区的人类可读名称。
      抛出:
      IllegalArgumentException - 如果 style 无效。
      自从:
      1.2
      参见:
    • getDisplayName

      public String  getDisplayName(boolean daylight, int style, Locale  locale)
      返回此 TimeZone 的指定 style 中适合呈现给指定 locale 中的用户的名称。如果指定的 daylighttrue ,则返回夏令时名称(即使此 TimeZone 不遵守夏令时)。否则,返回标准时间名称。

      查找时区名称时,使用从指定的 locale 派生的 ResourceBundle 的默认 Locale 搜索路径。 (不执行 fallback Locale 搜索。)如果在搜索路径的任何 Locale 中找到时区名称,包括 Locale.ROOT ,则返回该名称。否则,返回 规范化自定义 ID 格式 中的字符串。

      参数:
      daylight - true 指定夏令时名称,或 false 指定标准时间名称
      style - LONG SHORT
      locale - 提供显示名称的locale。
      返回:
      给定locale中此时区的人类可读名称。
      抛出:
      IllegalArgumentException - 如果 style 无效。
      NullPointerException - 如果 localenull
      自从:
      1.2
      参见:
    • getDSTSavings

      public int getDSTSavings()
      返回要添加到本地标准时间以获得本地挂钟时间的时间量。

      如果对 useDaylightTime() 的调用返回 true,则默认实现返回 3600000 毫秒(即一小时)。否则,返回 0(零)。

      如果底层 TimeZone 实现子类支持历史和未来的夏令时计划更改,则此方法返回可以作为未来预测的最后已知夏令时规则的节约时间量。

      如果需要任何给定时间戳的节省时间量,请使用此 TimeZone 和时间戳构造一个 Calendar ,并调用 Calendar.get ( Calendar.DST_OFFSET )

      返回:
      以毫秒为单位的节省时间
      自从:
      1.4
      参见:
    • useDaylightTime

      public abstract boolean useDaylightTime()
      查询此 TimeZone 是否使用夏令时。

      如果底层 TimeZone 实现子类支持历史和未来的夏令时时间表更改,则此方法引用最后已知的夏令时规则,该规则可以是未来的预测并且可能与当前规则不同。如果还应考虑当前规则,请考虑调用 observesDaylightTime()

      返回:
      true 如果此 TimeZone 使用夏令时,false 否则。
      参见:
    • observesDaylightTime

      public boolean observesDaylightTime()
      如果此 TimeZone 当前处于夏令时,或者如果在未来任何时间发生从标准时间到夏令时的转换,则返回 true

      如果 useDaylightTime()inDaylightTime(new Date()) 返回 true,则默认实现返回 true

      返回:
      true 如果这个 TimeZone 当前处于夏令时,或者如果在未来的任何时间从标准时间过渡到夏令时; false否则。
      自从:
      1.7
      参见:
    • inDaylightTime

      public abstract boolean inDaylightTime(Date  date)
      查询给定的 date 是否处于该时区的夏令时。
      参数:
      date - 给定的日期。
      返回:
      true 如果给定日期在夏令时,则 false 否则。
    • getTimeZone

      public static TimeZone  getTimeZone(String  ID)
      获取给定 ID 的 TimeZone
      参数:
      ID - TimeZone 的 ID,可以是缩写(例如“PST”)、全名(例如“America/Los_Angeles”)或自定义 ID(例如“GMT-8:00”)。请注意,缩写的支持只是为了与 JDK 1.1.x 兼容,应该使用全名。
      返回:
      指定的 TimeZone ,如果给定的 ID 无法理解,则为 GMT 时区。
    • getTimeZone

      public static TimeZone  getTimeZone(ZoneId  zoneId)
      获取给定 zoneIdTimeZone
      参数:
      zoneId - 从中获取时区 ID 的 ZoneId
      返回:
      指定的 TimeZone ,如果给定的 ID 无法理解,则为 GMT 时区。
      抛出:
      NullPointerException - 如果 zoneIdnull
      自从:
      1.8
    • toZoneId

      public ZoneId  toZoneId()
      将此 TimeZone 对象转换为 ZoneId
      返回:
      一个 ZoneId 表示与这个 TimeZone 相同的时区
      自从:
      1.8
    • 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。如果缓存的默认 TimeZone 可用,则返回其克隆。否则,该方法采取以下步骤来确定默认时区。
      • 如果可用,请使用 user.timezone 属性值作为默认时区 ID。
      • 检测平台时区 ID。平台时区和 ID 映射的来源可能因实现而异。
      • 如果给定或检测到的时区 ID 未知,请使用 GMT 作为最后的手段。

      根据 ID 创建的默认 TimeZone 被缓存,并返回其克隆。 user.timezone 属性值在返回时设置为 ID。

      返回:
      默认TimeZone
      参见:
    • setDefault

      public static void setDefault(TimeZone  zone)
      设置由 getDefault 方法返回的 TimeZonezone 已缓存。如果 zone 为 null,则清除缓存的默认值 TimeZone。此方法不会更改 user.timezone 属性的值。
      参数:
      zone - 新的默认值 TimeZone 或 null
      抛出:
      SecurityException - 如果安全经理的 checkPermission 拒绝 PropertyPermission("user.timezone", "write")
      参见:
    • hasSameRules

      public boolean hasSameRules(TimeZone  other)
      如果此区域与另一个区域具有相同的规则和偏移量,则返回 true。也就是说,如果此区域仅在 ID 上有所不同(如果有的话)。如果其他区域为空,则返回 false。
      参数:
      other - 要与之比较的 TimeZone 对象
      返回:
      如果另一个区域不为空且与此区域相同,则为 true,ID 可能除外
      自从:
      1.2
    • clone

      public Object  clone()
      创建此 TimeZone 的副本。
      重写:
      clone 在类 Object
      返回:
      这个TimeZone的克隆
      参见: