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
Modifier and TypeFieldDescriptionstatic final int
作为标准时间指定的开始或结束时间模式的常量。static final int
作为UTC指定的开始或结束时间模式的常量。static final int
作为壁钟时间指定的开始或结束时间模式的常量。 -
Constructor Summary
ConstructorDescriptionSimpleTimeZone
(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
返回夏令时期间时钟提前的毫秒数。int
getOffset
(int era, int year, int month, int day, int dayOfWeek, int millis) 返回指定日期和时间的本地时间与UTC之间的毫秒差,考虑原始偏移和夏令时的影响。int
getOffset
(long date) 返回给定时间的此时区与UTC之间的偏移量。int
获取此时区的GMT偏移量。int
hashCode()
为SimpleDateFormat对象生成哈希码。boolean
hasSameRules
(TimeZone other) 如果此区域与另一个区域具有相同的规则和偏移量,则返回true
。boolean
inDaylightTime
(Date date) 查询给定日期是否处于夏令时。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) 设置夏令时开始年份。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
返回此时区的字符串表示形式。
-