Module java.base
Package java.util

Class SimpleTimeZone

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

public class SimpleTimeZone extends TimeZone
SimpleTimeZoneTimeZone的具体子类,表示与公历一起使用的时区。该类保存与GMT的偏移量,称为原始偏移,以及夏令时日程的开始和结束规则。由于它只保存每个值,无法处理GMT偏移和夏令时日程的历史更改,除非setStartYear方法可以指定夏令时日程开始生效的年份。

要构造具有夏令时日程的SimpleTimeZone,可以使用一组规则描述日程,开始规则结束规则。指定夏令时开始或结束的日期是通过月份日期星期几值的组合来实现的。 月份值由日历MONTH字段值表示,例如Calendar.MARCH星期几值由日历DAY_OF_WEEK值表示,例如SUNDAY。值组合的含义如下。

  • 确切的日期
    要指定确切的日期,将月份日期设置为确切值,将星期几设置为零。例如,要指定3月1日,将月份设置为MARCH日期设置为1,星期几设置为0。
  • 月中某天的星期几
    要指定月中某天的星期几,将月份设置为确切的月份值,将日期设置为规则适用的日期或之后的日期,并将星期几设置为负的DAY_OF_WEEK字段值。例如,要指定4月的第二个星期日,将月份设置为APRIL日期设置为8,星期几设置为-SUNDAY
  • 月中某天之前的星期几
    要指定月中某天之前的星期几,将日期星期几设置为负值。例如,要指定3月21日之前的最后一个星期三,将月份设置为MARCH日期为-21,星期几-WEDNESDAY
  • 月中最后一个星期几
    要指定月中最后一个星期几,将星期几设置为DAY_OF_WEEK值,将日期设置为-1。例如,要指定10月的最后一个星期日,将月份设置为OCTOBER星期几设置为SUNDAY日期设置为-1。
夏令时开始或结束的时间由一天内的毫秒值指定。有三种模式用于指定时间:WALL_TIMESTANDARD_TIMEUTC_TIME。例如,如果夏令时在壁钟时间结束于凌晨2:00,可以在WALL_TIME模式下用7200000毫秒来指定。在这种情况下,结束规则的壁钟时间意味着与夏令时相同。

以下是构造时区对象参数的示例。


      // 基本GMT偏移: -8:00
      // 夏令时开始: 在标准时间的凌晨2:00
      //             在四月的第一个星期日
      // 夏令时结束: 在夏令时的凌晨2:00
      //             在十月的最后一个星期日
      // 节约: 1小时
      SimpleTimeZone(-28800000,
                     "America/Los_Angeles",
                     Calendar.APRIL, 1, -Calendar.SUNDAY,
                     7200000,
                     Calendar.OCTOBER, -1, Calendar.SUNDAY,
                     7200000,
                     3600000)

      // 基本GMT偏移: +1:00
      // 夏令时开始: 在UTC时间的凌晨1:00
      //             在三月的最后一个星期日
      // 夏令时结束: 在UTC时间的凌晨1:00
      //             在十月的最后一个星期日
      // 节约: 1小时
      SimpleTimeZone(3600000,
                     "Europe/Paris",
                     Calendar.MARCH, -1, Calendar.SUNDAY,
                     3600000, SimpleTimeZone.UTC_TIME,
                     Calendar.OCTOBER, -1, Calendar.SUNDAY,
                     3600000, SimpleTimeZone.UTC_TIME,
                     3600000)
 
这些参数规则也适用于设置规则方法,例如setStartRule
自从:
1.1
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    作为标准时间指定的开始或结束时间模式的常量。
    static final int
    作为UTC指定的开始或结束时间模式的常量。
    static final int
    作为壁钟时间指定的开始或结束时间模式的常量。

    Fields declared in class java.util.TimeZone

    LONG, SHORT
  • Constructor Summary

    Constructors
    Constructor
    Description
    SimpleTimeZone(int rawOffset, String ID)
    使用给定的基本GMT偏移和时区ID构造一个没有夏令时日程的SimpleTimeZone。
    SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int endMonth, int endDay, int endDayOfWeek, int endTime)
    使用给定的基本GMT偏移、时区ID和开始和结束夏令时规则构造一个SimpleTimeZone。
    SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int endMonth, int endDay, int endDayOfWeek, int endTime, int dstSavings)
    使用给定的基本GMT偏移、时区ID和开始和结束夏令时规则构造一个SimpleTimeZone。
    SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int startTimeMode, int endMonth, int endDay, int endDayOfWeek, int endTime, int endTimeMode, int dstSavings)
    使用给定的基本GMT偏移、时区ID和开始和结束夏令时规则构造一个SimpleTimeZone。
  • Method Summary

    Modifier and Type
    Method
    Description
    clone()
    返回此SimpleTimeZone实例的克隆。
    boolean
    equals(Object obj)
    比较两个SimpleTimeZone对象的相等性。
    int
    返回夏令时期间时钟提前的毫秒数。
    int
    getOffset(int era, int year, int month, int day, int dayOfWeek, int millis)
    返回指定日期和时间的本地时间与UTC之间的毫秒差,考虑原始偏移和夏令时的影响。
    int
    getOffset(long date)
    返回给定时间的此时区与UTC之间的偏移量。
    int
    获取此时区的GMT偏移量。
    int
    为SimpleDateFormat对象生成哈希码。
    boolean
    如果此区域与另一个区域具有相同的规则和偏移量,则返回true
    boolean
    查询给定日期是否处于夏令时。
    boolean
    如果此SimpleTimeZone遵守夏令时,则返回true
    void
    setDSTSavings(int millisSavedDuringDST)
    设置夏令时期间时钟提前的毫秒数。
    void
    setEndRule(int endMonth, int endDay, int endTime)
    将夏令时结束规则设置为月份内的固定日期。
    void
    setEndRule(int endMonth, int endDay, int endDayOfWeek, int endTime)
    设置夏令时结束规则。
    void
    setEndRule(int endMonth, int endDay, int endDayOfWeek, int endTime, boolean after)
    将夏令时结束规则设置为月份内给定日期之前或之后的星期几,例如,在第8日之后的第一个星期一。
    void
    setRawOffset(int offsetMillis)
    将基本时区偏移设置为GMT。
    void
    setStartRule(int startMonth, int startDay, int startTime)
    将夏令时开始规则设置为月份内的固定日期。
    void
    setStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime)
    设置夏令时开始规则。
    void
    setStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime, boolean after)
    将夏令时开始规则设置为月份内给定日期之前或之后的星期几,例如,在第8日之后的第一个星期一。
    void
    setStartYear(int year)
    设置夏令时开始年份。
    返回此时区的字符串表示形式。
    boolean
    查询此时区是否使用夏令时。

    Methods declared in class java.lang.Object

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • WALL_TIME

      public static final int WALL_TIME
      作为壁钟时间指定的开始或结束时间模式的常量。壁钟时间是开始规则的标准时间,结束规则的夏令时。
      自从:
      1.4
      参见:
    • STANDARD_TIME

      public static final int STANDARD_TIME
      作为标准时间指定的开始或结束时间模式的常量。
      自从:
      1.4
      参见:
    • UTC_TIME

      public static final int UTC_TIME
      作为UTC指定的开始或结束时间模式的常量。例如,欧盟规定以UTC时间为准。
      自从:
      1.4
      参见:
  • Constructor Details

    • SimpleTimeZone

      public SimpleTimeZone(int rawOffset, String ID)
      使用给定的基本GMT偏移和时区ID构造一个没有夏令时日程的SimpleTimeZone。
      参数:
      rawOffset - 相对于GMT的基本时区偏移量(以毫秒为单位)。
      ID - 分配给此实例的时区名称。
    • SimpleTimeZone

      public SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int endMonth, int endDay, int endDayOfWeek, int endTime)
      使用给定的基本GMT偏移、时区ID和开始和结束夏令时规则构造一个SimpleTimeZone。假定startTimeendTime都以壁钟时间表示。假定夏令时的持续时间为3600000毫秒(即一小时)。此构造函数等效于:
      
           SimpleTimeZone(rawOffset,
                          ID,
                          startMonth,
                          startDay,
                          startDayOfWeek,
                          startTime,
                          SimpleTimeZone.WALL_TIME,
                          endMonth,
                          endDay,
                          endDayOfWeek,
                          endTime,
                          SimpleTimeZone.WALL_TIME,
                          3600000)
       
      参数:
      rawOffset - 从GMT得到的基本时区偏移量。
      ID - 分配给此对象的时区ID。
      startMonth - 夏令时开始的月份。月份是一个MONTH字段值(从0开始,例如,1代表一月)。
      startDay - 夏令时开始的日期。请参阅类描述以了解此参数的特殊情况。
      startDayOfWeek - 夏令时开始的星期几。请参阅类描述以了解此参数的特殊情况。
      startTime - 夏令时开始的时间,以当地挂钟时间表示(一天内的毫秒数),在这种情况下是当地标准时间。
      endMonth - 夏令时结束的月份。月份是一个MONTH字段值(从0开始,例如,9代表十月)。
      endDay - 夏令时结束的日期。请参阅类描述以了解此参数的特殊情况。
      endDayOfWeek - 夏令时结束的星期几。请参阅类描述以了解此参数的特殊情况。
      endTime - 夏令时结束的时间,以当地挂钟时间表示(一天内的毫秒数),在这种情况下是当地夏令时。
      抛出:
      IllegalArgumentException - 如果月份、日期、星期几或时间参数超出了开始或结束规则的范围
    • SimpleTimeZone

      public SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int endMonth, int endDay, int endDayOfWeek, int endTime, int dstSavings)
      用给定的基本时区偏移量从GMT构造SimpleTimeZone,时区ID以及开始和结束夏令时的规则。假定startTimeendTime都以挂钟时间表示。此构造函数等效于:
      
           SimpleTimeZone(rawOffset,
                          ID,
                          startMonth,
                          startDay,
                          startDayOfWeek,
                          startTime,
                          SimpleTimeZone.WALL_TIME,
                          endMonth,
                          endDay,
                          endDayOfWeek,
                          endTime,
                          SimpleTimeZone.WALL_TIME,
                          dstSavings)
       
      参数:
      rawOffset - 从GMT得到的基本时区偏移量。
      ID - 分配给此对象的时区ID。
      startMonth - 夏令时开始的月份。月份是一个MONTH字段值(从0开始,例如,1代表一月)。
      startDay - 夏令时开始的日期。请参阅类描述以了解此参数的特殊情况。
      startDayOfWeek - 夏令时开始的星期几。请参阅类描述以了解此参数的特殊情况。
      startTime - 夏令时开始的时间,以当地挂钟时间表示,这种情况下是当地标准时间。
      endMonth - 夏令时结束的月份。月份是一个MONTH字段值(从0开始,例如,9代表十月)。
      endDay - 夏令时结束的日期。请参阅类描述以了解此参数的特殊情况。
      endDayOfWeek - 夏令时结束的星期几。请参阅类描述以了解此参数的特殊情况。
      endTime - 夏令时结束的时间,以当地挂钟时间表示,这种情况下是当地夏令时。
      dstSavings - 夏令时期间节省的毫秒数。
      抛出:
      IllegalArgumentException - 如果月份、日期、星期几或时间参数超出了开始或结束规则的范围
      自1.2版本起
    • SimpleTimeZone

      public SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int startTimeMode, int endMonth, int endDay, int endDayOfWeek, int endTime, int endTimeMode, int dstSavings)
      用给定的基本时区偏移量从GMT构造SimpleTimeZone,时区ID以及开始和结束夏令时的规则。此构造函数接受完整的开始和结束规则参数集,包括startTimeendTime的模式。模式指定startTimeendTime的挂钟时间、标准时间或UTC时间。
      参数:
      rawOffset - 从GMT得到的基本时区偏移量。
      ID - 分配给此对象的时区ID。
      startMonth - 夏令时开始的月份。月份是一个MONTH字段值(从0开始,例如,1代表一月)。
      startDay - 夏令时开始的日期。请参阅类描述以了解此参数的特殊情况。
      startDayOfWeek - 夏令时开始的星期几。请参阅类描述以了解此参数的特殊情况。
      startTime - 夏令时开始的时间,由startTimeMode指定的时间模式。
      startTimeMode - 由startTime指定的开始时间的模式。
      endMonth - 夏令时结束的月份。月份是一个MONTH字段值(从0开始,例如,9代表十月)。
      endDay - 夏令时结束的日期。请参阅类描述以了解此参数的特殊情况。
      endDayOfWeek - 夏令时结束的星期几。请参阅类描述以了解此参数的特殊情况。
      endTime - 夏令时结束的时间,由endTimeMode指定的时间模式。
      endTimeMode - 由endTime指定的结束时间的模式
      dstSavings - 夏令时期间节省的毫秒数。
      抛出:
      IllegalArgumentException - 如果月份、日期、星期几、时间更多或时间参数超出了开始或结束规则的范围,或者时间模式值无效。
      自1.4版本起
      参见:
  • Method Details

    • setStartYear

      public void setStartYear(int year)
      设置夏令时开始的年份。
      参数:
      year - 夏令时开始的年份。
    • setStartRule

      public void setStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime)
      设置夏令时开始规则。例如,如果夏令时在四月的第一个星期日凌晨2点开始,您可以通过调用以下方式设置开始规则:
      setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2*60*60*1000);
      参数:
      startMonth - 夏令时开始的月份。月份是一个MONTH字段值(从0开始,例如,1代表一月)。
      startDay - 夏令时开始的日期。请参阅类描述以了解此参数的特殊情况。
      startDayOfWeek - 夏令时开始的星期几。请参阅类描述以了解此参数的特殊情况。
      startTime - 夏令时开始的时间,以当地挂钟时间表示,这种情况下是当地标准时间。
      抛出:
      IllegalArgumentException - 如果startMonthstartDaystartDayOfWeekstartTime参数超出范围
    • setStartRule

      public void setStartRule(int startMonth, int startDay, int startTime)
      将夏令时开始规则设置为月份内的固定日期。此方法等效于:
      setStartRule(startMonth, startDay, 0, startTime)
      参数:
      startMonth - 夏令时开始的月份。月份是一个MONTH字段值(从0开始,例如,1代表一月)。
      startDay - 夏令时开始的日期。
      startTime - 夏令时开始的时间,以当地挂钟时间表示,这种情况下是当地标准时间。请参阅类描述以了解此参数的特殊情况。
      抛出:
      IllegalArgumentException - 如果startMonthstartDayOfMonthstartTime参数超出范围
      自1.2版本起
    • setStartRule

      public void setStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime, boolean after)
      将夏令时开始规则设置为月份内给定日期之前或之后的工作日,例如,在第8号之后的第一个星期一。
      参数:
      startMonth - 夏令时开始的月份。月份是一个MONTH字段值(从0开始,例如,1代表一月)。
      startDay - 夏令时开始的日期。
      startDayOfWeek - 夏令时开始的星期几。
      startTime - 夏令时开始的时间,以当地挂钟时间表示,这种情况下是当地标准时间。
      after - 如果为true,则此规则选择dayOfWeekdayOfMonth之后的第一个。如果为false,则此规则选择dayOfWeekdayOfMonth之前的最后一个。
      抛出:
      IllegalArgumentException - 如果startMonthstartDaystartDayOfWeekstartTime参数超出范围
      自1.2版本起
    • setEndRule

      public void setEndRule(int endMonth, int endDay, int endDayOfWeek, int endTime)
      设置夏令时结束规则。例如,如果夏令时在十月的最后一个星期日凌晨2点结束,您可以通过调用以下方式设置结束规则:setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*60*60*1000);
      参数:
      endMonth - 夏令时结束的月份。月份是一个MONTH字段值(从0开始计算,例如,10代表十月)。
      endDay - 夏令时结束的日期。请参阅类描述以了解此参数的特殊情况。
      endDayOfWeek - 夏令时结束的星期几。请参阅类描述以了解此参数的特殊情况。
      endTime - 夏令时结束的本地墙上时钟时间(一天内的毫秒数),在这种情况下是本地夏令时。
      抛出:
      IllegalArgumentException - 如果endMonthendDayendDayOfWeekendTime参数超出范围
    • setEndRule

      public void setEndRule(int endMonth, int endDay, int endTime)
      将夏令时结束规则设置为月份内的固定日期。此方法等效于:
      setEndRule(endMonth, endDay, 0, endTime)
      参数:
      endMonth - 夏令时结束的月份。月份是一个MONTH字段值(从0开始计算,例如,10代表十月)。
      endDay - 夏令时结束的日期。
      endTime - 夏令时结束的本地墙上时钟时间(一天内的毫秒数),在这种情况下是本地夏令时。
      抛出:
      IllegalArgumentException - 如果endMonthendDayendTime参数超出范围
      自1.2版本起:
      1.2
    • setEndRule

      public void setEndRule(int endMonth, int endDay, int endDayOfWeek, int endTime, boolean after)
      将夏令时结束规则设置为月份内给定日期之前或之后的工作日,例如,在第8日或之后的第一个星期一。
      参数:
      endMonth - 夏令时结束的月份。月份是一个MONTH字段值(从0开始计算,例如,10代表十月)。
      endDay - 夏令时结束的日期。
      endDayOfWeek - 夏令时结束的星期几。
      endTime - 夏令时结束的本地墙上时钟时间(一天内的毫秒数),在这种情况下是本地夏令时。
      after - 如果为true,则此规则选择月份内endDayOfWeek之后或等于endDay的第一个。如果为false,则此规则选择月份内endDayOfWeek之前或等于endDay的最后一个。
      抛出:
      IllegalArgumentException - 如果endMonthendDayendDayOfWeekendTime参数超出范围
      自1.2版本起:
      1.2
    • getOffset

      public int getOffset(long date)
      返回给定时间的此时区与UTC之间的偏移量。如果给定时间处于夏令时生效期间,则偏移值将根据夏令时的时间调整。
      覆盖:
      getOffset 在类中 TimeZone
      参数:
      date - 找到时区偏移量的时间
      返回:
      添加到UTC以获取本地时间的毫秒数。
      自1.4版本起:
      1.4
      参见:
    • getOffset

      public int getOffset(int era, int year, int month, int day, int dayOfWeek, int millis)
      返回指定日期和时间的本地时间与UTC之间的毫秒差异,考虑原始偏移和夏令时的影响。此方法假定开始和结束月份不同。它还使用默认的GregorianCalendar对象作为其基础日历,例如用于确定闰年。请勿将此方法的结果与除默认GregorianCalendar之外的日历一起使用。

      注意:一般情况下,客户端应该使用Calendar.get(ZONE_OFFSET) + Calendar.get(DST_OFFSET)而不是调用此方法。

      指定为:
      getOffset 在类中 TimeZone
      参数:
      era - 给定日期的年代。
      year - 给定日期的年份。
      month - 给定日期的月份。月份从0开始计算,例如,1代表一月。
      day - 给定日期的月中日期。
      dayOfWeek - 给定日期的星期几。
      millis - 标准本地时间中的一天中的毫秒数。
      返回:
      添加到UTC以获取本地时间的毫秒数。
      抛出:
      IllegalArgumentException - 如果eramonthdaydayOfWeekmillis参数超出范围
      参见:
    • getRawOffset

      public int getRawOffset()
      获取此时区的GMT偏移量。
      指定为:
      getRawOffset 在类中 TimeZone
      返回:
      毫秒为单位的GMT偏移值
      参见:
    • setRawOffset

      public void setRawOffset(int offsetMillis)
      将基本时区偏移设置为GMT。这是添加到UTC以获取本地时间的偏移量。
      指定为:
      setRawOffset 在类中 TimeZone
      参数:
      offsetMillis - 与GMT的给定基本时区偏移量。
      参见:
    • setDSTSavings

      public void setDSTSavings(int millisSavedDuringDST)
      设置夏令时期间时钟提前的毫秒数。
      参数:
      millisSavedDuringDST - 当夏令时规则生效时,时间相对于标准时间提前的毫秒数。通常为正数,例如一个小时(3600000)。
      自1.2版本起:
      1.2
      参见:
    • getDSTSavings

      public int getDSTSavings()
      返回夏令时期间时钟提前的毫秒数。
      覆盖:
      getDSTSavings 在类中 TimeZone
      返回:
      当夏令时规则生效时,时间相对于标准时间提前的毫秒数,如果此时区不遵守夏令时规则,则为0(零)。
      自1.2版本起:
      1.2
      参见:
    • useDaylightTime

      public boolean useDaylightTime()
      查询此时区是否使用夏令时。
      指定为:
      useDaylightTime 在类中 TimeZone
      返回:
      如果此时区使用夏令时,则为true;否则为false。
      参见:
    • observesDaylightTime

      public boolean observesDaylightTime()
      如果此SimpleTimeZone遵守夏令时,则返回true。此方法等效于useDaylightTime()
      覆盖:
      observesDaylightTime 在类中 TimeZone
      返回:
      如果此SimpleTimeZone遵守夏令时,则返回true;否则返回false
      自1.7版本起:
      1.7
      参见:
    • inDaylightTime

      public boolean inDaylightTime(Date date)
      查询给定日期是否处于夏令时。
      指定为:
      inDaylightTime 在类中 TimeZone
      实现要求:
      如果datenull,默认实现将抛出NullPointerException
      参数:
      date - 给定的日期。
      返回:
      如果给定日期处于夏令时,则返回true;否则返回false。
      抛出:
      NullPointerException - 如果datenull,此方法可能会抛出NullPointerException
    • clone

      public Object clone()
      返回此SimpleTimeZone实例的克隆。
      覆盖:
      clone 在类 TimeZone
      返回:
      此实例的克隆。
      参见:
    • hashCode

      public int hashCode()
      生成 SimpleDateFormat 对象的哈希码。
      覆盖:
      hashCode 在类 Object
      返回:
      此对象的哈希码
      参见:
    • equals

      public boolean equals(Object obj)
      比较两个 SimpleTimeZone 对象的相等性。
      覆盖:
      equals 在类 Object
      参数:
      obj - 要比较的 SimpleTimeZone 对象。
      返回:
      如果给定的 obj 与此 SimpleTimeZone 对象相同,则返回 true;否则返回 false。
      参见:
    • hasSameRules

      public boolean hasSameRules(TimeZone other)
      如果此时区具有与另一个时区相同的规则和偏移量,则返回 true
      覆盖:
      hasSameRules 在类 TimeZone
      参数:
      other - 要比较的 TimeZone 对象
      返回:
      如果给定的时区是 SimpleTimeZone 并且具有与此时区相同的规则和偏移量,则返回 true
      自:
      1.2
    • toString

      public String toString()
      返回此时区的字符串表示形式。
      覆盖:
      toString 在类 Object
      返回:
      此时区的字符串表示形式。