java.lang.Object
java.util.TimeZone
java.util.SimpleTimeZone
- 所有已实现的接口:
-
Serializable,Cloneable
SimpleTimeZone是TimeZone的具体子类,表示与公历一起使用的时区。该类保存与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_TIME、STANDARD_TIME和UTC_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
FieldsModifier and TypeFieldDescriptionstatic final int作为标准时间指定的开始或结束时间模式的常量。static final int作为UTC指定的开始或结束时间模式的常量。static final int作为壁钟时间指定的开始或结束时间模式的常量。 -
Constructor Summary
ConstructorsConstructorDescriptionSimpleTimeZone(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 TypeMethodDescriptionclone()返回此SimpleTimeZone实例的克隆。boolean比较两个SimpleTimeZone对象的相等性。int返回夏令时期间时钟提前的毫秒数。intgetOffset(int era, int year, int month, int day, int dayOfWeek, int millis) 返回指定日期和时间的本地时间与UTC之间的毫秒差,考虑原始偏移和夏令时的影响。intgetOffset(long date) 返回给定时间的此时区与UTC之间的偏移量。int获取此时区的GMT偏移量。inthashCode()为SimpleDateFormat对象生成哈希码。booleanhasSameRules(TimeZone other) 如果此区域与另一个区域具有相同的规则和偏移量,则返回true。booleaninDaylightTime(Date date) 查询给定日期是否处于夏令时。boolean如果此SimpleTimeZone遵守夏令时,则返回true。voidsetDSTSavings(int millisSavedDuringDST) 设置夏令时期间时钟提前的毫秒数。voidsetEndRule(int endMonth, int endDay, int endTime) 将夏令时结束规则设置为月份内的固定日期。voidsetEndRule(int endMonth, int endDay, int endDayOfWeek, int endTime) 设置夏令时结束规则。voidsetEndRule(int endMonth, int endDay, int endDayOfWeek, int endTime, boolean after) 将夏令时结束规则设置为月份内给定日期之前或之后的星期几,例如,在第8日之后的第一个星期一。voidsetRawOffset(int offsetMillis) 将基本时区偏移设置为GMT。voidsetStartRule(int startMonth, int startDay, int startTime) 将夏令时开始规则设置为月份内的固定日期。voidsetStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime) 设置夏令时开始规则。voidsetStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime, boolean after) 将夏令时开始规则设置为月份内给定日期之前或之后的星期几,例如,在第8日之后的第一个星期一。voidsetStartYear(int year) 设置夏令时开始年份。toString()返回此时区的字符串表示形式。boolean查询此时区是否使用夏令时。Methods declared in class java.util.TimeZone
getAvailableIDs, getAvailableIDs, getDefault, getDisplayName, getDisplayName, getDisplayName, getDisplayName, getID, getTimeZone, getTimeZone, setDefault, setID, toZoneId
-
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
使用给定的基本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。假定startTime和endTime都以壁钟时间表示。假定夏令时的持续时间为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以及开始和结束夏令时的规则。假定startTime和endTime都以挂钟时间表示。此构造函数等效于: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以及开始和结束夏令时的规则。此构造函数接受完整的开始和结束规则参数集,包括startTime和endTime的模式。模式指定startTime和endTime的挂钟时间、标准时间或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- 如果startMonth、startDay、startDayOfWeek或startTime参数超出范围
-
setStartRule
public void setStartRule(int startMonth, int startDay, int startTime) 将夏令时开始规则设置为月份内的固定日期。此方法等效于:setStartRule(startMonth, startDay, 0, startTime)- 参数:
-
startMonth- 夏令时开始的月份。月份是一个MONTH字段值(从0开始,例如,1代表一月)。 -
startDay- 夏令时开始的日期。 -
startTime- 夏令时开始的时间,以当地挂钟时间表示,这种情况下是当地标准时间。请参阅类描述以了解此参数的特殊情况。 - 抛出:
-
IllegalArgumentException- 如果startMonth、startDayOfMonth或startTime参数超出范围 - 自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,则此规则选择dayOfWeek在dayOfMonth之后的第一个。如果为false,则此规则选择dayOfWeek在dayOfMonth之前的最后一个。 - 抛出:
-
IllegalArgumentException- 如果startMonth、startDay、startDayOfWeek或startTime参数超出范围 - 自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- 如果endMonth、endDay、endDayOfWeek或endTime参数超出范围
-
setEndRule
public void setEndRule(int endMonth, int endDay, int endTime) 将夏令时结束规则设置为月份内的固定日期。此方法等效于:setEndRule(endMonth, endDay, 0, endTime)- 参数:
-
endMonth- 夏令时结束的月份。月份是一个MONTH字段值(从0开始计算,例如,10代表十月)。 -
endDay- 夏令时结束的日期。 -
endTime- 夏令时结束的本地墙上时钟时间(一天内的毫秒数),在这种情况下是本地夏令时。 - 抛出:
-
IllegalArgumentException- 如果endMonth、endDay或endTime参数超出范围 - 自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- 如果endMonth、endDay、endDayOfWeek或endTime参数超出范围 - 自1.2版本起:
- 1.2
-
getOffset
public int getOffset(long date) 返回给定时间的此时区与UTC之间的偏移量。如果给定时间处于夏令时生效期间,则偏移值将根据夏令时的时间调整。 -
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- 如果era、month、day、dayOfWeek或millis参数超出范围 - 参见:
-
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()- 覆盖:
-
observesDaylightTime在类中TimeZone - 返回:
-
如果此
SimpleTimeZone遵守夏令时,则返回true;否则返回false。 - 自1.7版本起:
- 1.7
- 参见:
-
inDaylightTime
查询给定日期是否处于夏令时。- 指定为:
-
inDaylightTime在类中TimeZone - 实现要求:
-
如果
date为null,默认实现将抛出NullPointerException - 参数:
-
date- 给定的日期。 - 返回:
- 如果给定日期处于夏令时,则返回true;否则返回false。
- 抛出:
-
NullPointerException- 如果date为null,此方法可能会抛出NullPointerException
-
clone
返回此SimpleTimeZone实例的克隆。 -
hashCode
public int hashCode()生成 SimpleDateFormat 对象的哈希码。 -
equals
比较两个SimpleTimeZone对象的相等性。 -
hasSameRules
如果此时区具有与另一个时区相同的规则和偏移量,则返回true。- 覆盖:
-
hasSameRules在类TimeZone - 参数:
-
other- 要比较的 TimeZone 对象 - 返回:
-
如果给定的时区是 SimpleTimeZone 并且具有与此时区相同的规则和偏移量,则返回
true - 自:
- 1.2
-
toString
返回此时区的字符串表示形式。
-