Module  java.base
软件包  java.util

Class TimeZone

  • All Implemented Interfaces:
    SerializableCloneable
    已知直接子类:
    SimpleTimeZone


    public abstract class TimeZone
    extends Object
    implements Serializable, Cloneable
    TimeZone代表时区偏移量,也可以显示夏令时。

    通常,您将获得一个TimeZone使用getDefault ,根据程序运行的时区创建一个TimeZone 例如,对于在日本运行的程序, getDefault基于日本标准时间创建TimeZone对象。

    您还可以得到一个TimeZone使用getTimeZone具有时区ID一起。 例如,美国太平洋时区的时区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前10小时10分钟。

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

    创建TimeZone ,指定的自定义时区ID TimeZone以下语法进行标准化:

     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平台只能识别一个他们。
    从以下版本开始:
    1.1
    另请参见:
    CalendarGregorianCalendarSimpleTimeZoneSerialized Form
    • Field Summary

      Fields  
      Modifier and Type Field 描述
      static int LONG
      getDisplayName()的样式说明 getDisplayName()表示长名称,如“太平洋标准时间”。
      static int SHORT
      getDisplayName()的样式说明符,表示短名称,如“PST”。
    • 构造方法摘要

      构造方法  
      Constructor 描述
      TimeZone​()
      唯一的构造函数。
    • 方法摘要

      所有方法  静态方法  接口方法  抽象方法  具体的方法 
      Modifier and Type 方法 描述
      Object clone​()
      创建一个这个 TimeZone的副本。
      static String[] getAvailableIDs​()
      获取支持的所有可用ID。
      static String[] getAvailableIDs​(int rawOffset)
      根据给定的时区偏移(以毫秒为单位)获取可用ID。
      static TimeZone getDefault​()
      获取Java虚拟机的默认值 TimeZone
      String getDisplayName​()
      返回此 TimeZone的较长标准时间名称, TimeZone适用于默认语言环境中的用户呈现。
      String getDisplayName​(boolean daylight, int style)
      返回此 TimeZone指定的 style中的名称,该名称适用于以默认语言环境向用户呈现。
      String getDisplayName​(boolean daylight, int style, Locale locale)
      返回此 TimeZone指定的 style中的一个名称,适用于在指定的 style中向用户 locale
      String getDisplayName​(Locale locale)
      返回此 TimeZone的长标准时间名称,适用于在指定的 locale向用户 locale
      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的 TimeZone
      static TimeZone getTimeZone​(ZoneId zoneId)
      获得 TimeZone给定的 zoneId
      boolean hasSameRules​(TimeZone other)
      如果此区域具有与其他区域相同的规则和偏移量,则返回true。
      abstract boolean inDaylightTime​(Date date)
      查询给定的 date是否在此时区的夏令时间内。
      boolean observesDaylightTime​()
      如果此 TimeZone当前处于夏令时,或者如果将来发生从标准时间到夏令时的转换,则返回 true
      static void setDefault​(TimeZone zone)
      设置 TimeZone由返回 getDefault方法。
      void setID​(String ID)
      设置时区ID。
      abstract void setRawOffset​(int offsetMillis)
      将基准时区偏移设置为GMT。
      ZoneId toZoneId​()
      将此 TimeZone对象转换为 ZoneId
      abstract boolean useDaylightTime​()
      查询 TimeZone使用夏令时。
    • 字段详细信息

      • SHORT

        public static final int SHORT
        getDisplayName()的样式说明符,表示短名称,如“PST”。
        从以下版本开始:
        1.2
        另请参见:
        LONGConstant Field Values
      • LONG

        public static final int LONG
        getDisplayName()的样式说明 getDisplayName()表示长名称,如“太平洋标准时间”。
        从以下版本开始:
        1.2
        另请参见:
        SHORTConstant Field Values
    • 构造方法详细信息

      • 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。 例如,1月份为0。
        day - 给定日期的日期。
        dayOfWeek - 给定日期的星期几。
        milliseconds - 标准本地时间的毫秒数。
        结果
        以毫秒为单位的偏移量添加到GMT以获取本地时间。
        另请参见:
        Calendar.ZONE_OFFSETCalendar.DST_OFFSET
      • getOffset

        public int getOffset​(long date)
        在指定的日期返回此时区与UTC的偏移量。 如果夏令时在指定的日期生效,则偏移值将随着夏令时的数量而调整。

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

        参数
        date - 自1970年1月1日00:00:00 GMT以毫秒表示的日期
        结果
        以毫秒为单位添加到UTC以获取本地时间的时间量。
        从以下版本开始:
        1.4
        另请参见:
        Calendar.ZONE_OFFSETCalendar.DST_OFFSET
      • 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为单位的原始偏移时间(以毫秒为单位)的量。
        另请参见:
        Calendar.ZONE_OFFSET
      • getID

        public String getID​()
        获取此时区的ID。
        结果
        此时区的ID。
      • setID

        public void setID​(String ID)
        设置时区ID。 这不会更改时区对象中的任何其他数据。
        参数
        ID - 新的时区ID。
      • getDisplayName

        public final String getDisplayName​(Locale locale)
        返回此TimeZone的较长标准时间名称,适用于在指定的locale向用户locale

        此方法相当于:

         getDisplayName(false, LONG, locale)
         
        参数
        locale - 提供显示名称的区域设置。
        结果
        该时区的人机可读名称在给定的区域设置。
        异常
        NullPointerException - 如果 localenull
        从以下版本开始:
        1.2
        另请参见:
        getDisplayName(boolean, int, Locale)
      • getDisplayName

        public String getDisplayName​(boolean daylight,
                                     int style,
                                     Locale locale)
        返回该TimeZone指定的style中的一个名称,适用于在指定的style中向用户locale 如果指定的daylighttrue ,则会返回夏令时名称(即使此TimeZone未遵守夏令时)。 否则返回标准时间名称。

        当查找时区名称时,使用从指定的locale派生的locale (No fallback Locale执行搜索。)如果找到包含Locale.ROOT的搜索路径的任何Locale中的时区名称,则返回该名称。 否则,返回normalized custom ID format中的字符串。

        参数
        daylight - true指定夏令时名称,或指定标准时间名称的 false
        style - LONGSHORT
        locale - 提供显示名称的区域设置。
        结果
        该时区的人机可读名称在给定的区域设置。
        异常
        IllegalArgumentException - 如果 style无效。
        NullPointerException - 如果 localenull
        从以下版本开始:
        1.2
        另请参见:
        DateFormatSymbols.getZoneStrings()
      • getDSTSavings

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

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

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

        如果需要任何给定时间戳的节省时间, 使用该TimeZone和时间戳构建 ( ,并致电Calendar.get ( Calendar.DST_OFFSET )

        结果
        节省时间(毫秒)
        从以下版本开始:
        1.4
        另请参见:
        inDaylightTime(Date)getOffset(long)getOffset(int,int,int,int,int,int)Calendar.ZONE_OFFSET
      • useDaylightTime

        public abstract boolean useDaylightTime​()
        查询TimeZone使用夏令时。

        如果底层的TimeZone实现子类支持历史和未来的夏令时计划更改,则该方法参考最后一个已知的夏令时规则,该规则可以是将来的预测,并且可能与当前规则不同。 如果现行规则也应该考虑,请考虑拨打observesDaylightTime()

        结果
        true如果这 TimeZone使用夏令时, false否则。
        另请参见:
        inDaylightTime(Date)Calendar.DST_OFFSET
      • observesDaylightTime

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

        默认实现返回true如果useDaylightTime()或者inDaylightTime(new Date())回报true

        结果
        true如果此TimeZone当前处于夏令时,或者如果从将来的时间发生从标准时间到夏令时的过渡; false否则。
        从以下版本开始:
        1.7
        另请参见:
        useDaylightTime()inDaylightTime(Date)Calendar.DST_OFFSET
      • inDaylightTime

        public abstract boolean inDaylightTime​(Date date)
        查询给定的 date是否在此时区的 date时制。
        参数
        date - 给定的日期。
        结果
        true如果给定的日期是夏令时, false ,否则。
      • getTimeZone

        public static TimeZone getTimeZone​(String ID)
        获取给定ID的 TimeZone
        参数
        ID -的ID为TimeZone ,要么的缩写如“PST”,一个完整的名称,如“美国/洛杉矶”,或自定义ID,如“GMT-8:00”。 请注意,缩写的支持仅适用于JDK 1.1.x兼容性,应使用全名。
        结果
        指定的 TimeZone或GMT区域,如果给定的ID不能被理解。
      • getTimeZone

        public static TimeZone getTimeZone​(ZoneId zoneId)
        获取 TimeZone为给定 zoneId
        参数
        zoneId - 获得时区ID的ZoneId
        结果
        指定的 TimeZone或GMT区域,如果给定的ID不能被理解。
        异常
        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偏移量。 例如,“美国/凤凰”和“美国/丹佛”都有GMT-07:00,但夏令时不同。
        另请参见:
        getRawOffset()
      • 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(TimeZone)
      • setDefault

        public static void setDefault​(TimeZone zone)
        设置TimeZone由返回getDefault方法。 zone被缓存。 如果zone为空,缓存默认值TimeZone被清除。 此方法不会更改user.timezone属性的值。
        参数
        zone - 新的默认值 TimeZone ,或null
        异常
        SecurityException - 如果安全经理的 checkPermission否认 PropertyPermission("user.timezone", "write")
        另请参见:
        getDefault()PropertyPermission
      • hasSameRules

        public boolean hasSameRules​(TimeZone other)
        如果此区域具有与其他区域相同的规则和偏移量,则返回true。 也就是说,如果这个区域只有ID不同,如果有的话。 如果其他区域为空,则返回false。
        参数
        other - 要比较的 TimeZone对象
        结果
        如果其他区域不为空且与此相同,则为true,ID可能为例外
        从以下版本开始:
        1.2
      • clone

        public Object clone​()
        创建一个这个 TimeZone的副本。
        重写:
        cloneObject
        结果
        这个 TimeZone的克隆
        另请参见:
        Cloneable