模块  java.base
软件包  java.util

Class TimeZone

  • 实现的所有接口
    SerializableCloneable
    已知直接子类:
    SimpleTimeZone

    public abstract class TimeZone
    extends Object
    implements Serializable, Cloneable
    TimeZone表示时区偏移,并且还计算出夏令时。

    通常情况下,你会得到一个TimeZone使用getDefault它创建了一个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提前10小时10分钟。

    格式与语言环境无关,数字必须取自Unicode标准的Basic Latin块。 不能使用自定义时区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平台只能识别其中一个他们。
    从以下版本开始:
    1.1
    另请参见:
    CalendarGregorianCalendarSimpleTimeZoneSerialized Form
    • 字段汇总

      字段  
      变量和类型 字段 描述
      static int LONG
      getDisplayName()的样式说明符,表示长名称,例如“太平洋标准时间”。
      static int SHORT
      getDisplayName()的样式说明符,表示短名称,例如“PST”。
    • 构造方法摘要

      构造方法  
      构造器 描述
      TimeZone()
      唯一的构造函数。
    • 字段详细信息

      • SHORT

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

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

      • 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表示1月份。
        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以毫秒为单位的日期
        结果
        添加到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呈现给用户。

        这种方法相当于:

         getDisplayName(false, LONG, locale)
         
        参数
        locale - 提供显示名称的语言环境。
        结果
        给定语言环境中此时区的可读名称。
        异常
        NullPointerException - 如果 localenull
        从以下版本开始:
        1.2
        另请参见:
        getDisplayName(boolean, int, Locale)
      • getDisplayName

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

        查找时区名称时,将使用从指定的locale派生的locale (不执行fallback Locale搜索。)如果找到搜索路径的任何Locale中的时区名称(包括Locale.ROOT ,则返回该名称。 否则,返回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 - 给定日期。
        结果
        true如果给定日期为夏令时, false ,否则为。
      • getTimeZone

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

        public static TimeZone getTimeZone​(ZoneId zoneId)
        获取 TimeZone对于给定的 zoneId
        参数
        zoneId - 从中获取时区ID的ZoneId
        结果
        如果无法理解给定的ID,则指定 TimeZone或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,但在夏令时行为方面有所不同。
        另请参见:
        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为null,则清除缓存的默认值TimeZone 此方法不会更改user.timezone属性的值。
        参数
        zone - 新的默认值 TimeZone ,或null
        异常
        SecurityException - 如果安全经理的 checkPermission否认 PropertyPermission("user.timezone", "write")
        另请参见:
        getDefault()PropertyPermission
      • hasSameRules

        public boolean hasSameRules​(TimeZone other)
        如果此区域与另一个区域具有相同的规则和偏移量,则返回true。 也就是说,如果此区域仅在ID方面有所不同,则完全不同。 如果另一个区域为null,则返回false。
        参数
        other - 要与之比较的 TimeZone对象
        结果
        如果另一个区域不为空且与此区域相同,则为true,但ID可能例外
        从以下版本开始:
        1.2
      • clone

        public Object clone()
        创建此 TimeZone的副本。
        重写:
        clone在类 Object
        结果
        这个 TimeZone
        另请参见:
        Cloneable