阅读(2150) (0)

鸿蒙OS SimpleTimeZone

2022-06-16 16:28:40 更新

SimpleTimeZone

java.lang.Object

|---java.util.TimeZone

|---|---java.util.SimpleTimeZone

public class SimpleTimeZone
extends TimeZone

SimpleTimeZone 是 TimeZone 的具体子类,表示用于公历的时区。 该类保存与 GMT 的偏移量,称为原始偏移量,以及夏令时时间表的开始和结束规则。 由于它只为每个值保存单个值,因此它无法处理与 GMT 和夏令时计划的偏移量的历史变化,除了 setStartYear 方法可以指定夏令时计划开始生效的年份。

要构建具有夏令时时间表的 SimpleTimeZone,可以使用一组规则来描述时间表,即开始规则和结束规则。 夏令时开始或结束的日期由月份、月份和星期几值的组合指定。 月份值由 Calendar Calendar#MONTH 字段值表示,例如 Calendar#MARCH。 星期几值由 Calendar Calendar#DAY_OF_WEEK 值表示,例如 Calendar#SUNDAY。 值组合的含义如下。

  • 准确的月份日期 要指定准确的月份日期,请将月份和月份日期设置为准确值,并将星期几设置为零。 例如,要指定 3 月 1 日,请将月份设置为 Calendar#MARCH,将 day-of-month 设置为 1,将 day-of-week 设置为 0。
  • 星期几在一个月的某一天或之后要指定星期几在一个月的某一天或之后,请将月份设置为精确的月份值,将月份设置为应用规则的当天或之后的日期, 和星期几到一个负的 Calendar#DAY_OF_WEEK 字段值。 例如,要指定四月的第二个星期日,请将月份设置为 Calendar#APRIL,将日期设置为 8,将星期几设置为 -Calendar#SUNDAY。
  • 星期几在一个月的某一天或之前 要指定一周中的某一天在一个月的某一天或之前,请将 day-of-month 和 day-of-week 设置为负值。 例如,要指定 3 月 21 日或之前的最后一个星期三,请将月份设置为 Calendar#MARCH,日期为 -21,星期几为 -Calendar#WEDNESDAY。
  • 一个月的最后一周要指定一个月的最后一周,请将 day-of-week 设置为 Calendar#DAY_OF_WEEK 值,并将 day-of-month 设置为 -1。 例如,要指定 10 月的最后一个星期日,请将月份设置为 Calendar#OCTOBER,将星期几设置为 Calendar#SUNDAY,并将日期设置为 -1。

夏令时开始或结束的时间由一天中的毫秒值指定。 有三种指定时间的模式:WALL_TIME、STANDARD_TIME 和 UTC_TIME。 例如,如果夏令时在挂钟时间的凌晨 2:00 结束,则可以在 WALL_TIME 模式下指定为 7200000 毫秒。 在这种情况下,结束规则的挂钟时间与白天时间的含义相同。

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

      // Base GMT offset: -8:00
      // DST starts:      at 2:00am in standard time
      //                  on the first Sunday in April
      // DST ends:        at 2:00am in daylight time
      //                  on the last Sunday in October
      // Save:            1 hour
      SimpleTimeZone(-28800000,
                     "America/Los_Angeles",
                     Calendar.APRIL, 1, -Calendar.SUNDAY,
                     7200000,
                     Calendar.OCTOBER, -1, Calendar.SUNDAY,
                     7200000,
                     3600000)


      // Base GMT offset: +1:00
      // DST starts:      at 1:00am in UTC time
      //                  on the last Sunday in March
      // DST ends:        at 1:00am in UTC time
      //                  on the last Sunday in October
      // Save:            1 hour
      SimpleTimeZone(3600000,
                     "Europe/Paris",
                     Calendar.MARCH, -1, Calendar.SUNDAY,
                     3600000, SimpleTimeZone.UTC_TIME,
                     Calendar.OCTOBER, -1, Calendar.SUNDAY,
                     3600000, SimpleTimeZone.UTC_TIME,
                     3600000)

这些参数规则同样适用于设置规则方法,例如setStartRule。

字段摘要

修饰符和类型 字段 描述
static int STANDARD_TIME 指定为标准时间的开始或结束时间模式的常数。
static int UTC_TIME 指定为 UTC 的开始或结束时间模式的常量。
static int WALL_TIME 指定为挂钟时间的开始或结束时间模式的常量。
从类 java.util.TimeZone 继承的字段
LONG, SHORT

构造函数摘要

构造函数 描述
SimpleTimeZone(int rawOffset, String ID) 构造一个 SimpleTimeZone,它具有与 GMT 的给定基本时区偏移量和时区 ID,没有夏令时时间表。
SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int endMonth, int endDay, int endDayOfWeek, int endTime) 构造一个 SimpleTimeZone,它具有与 GMT 的给定基本时区偏移量、时区 ID 以及用于开始和结束夏令时的规则。
SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int endMonth, int endDay, int endDayOfWeek, int endTime, int dstSavings) 构造一个 SimpleTimeZone,它具有与 GMT 的给定基本时区偏移量、时区 ID 以及用于开始和结束夏令时的规则。
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) 构造一个 SimpleTimeZone,它具有与 GMT 的给定基本时区偏移量、时区 ID 以及用于开始和结束夏令时的规则。

方法总结

修饰符和类型 方法 描述
Object clone() 返回此 SimpleTimeZone 实例的克隆。
boolean equals(Object obj) 比较两个 SimpleTimeZone 对象的相等性。
int getDSTSavings() 返回在夏令时期间时钟提前的时间量(以毫秒为单位)。
int getOffset(int era, int year, int month, int day, int dayOfWeek, int millis) 返回指定日期和时间的本地时间和 UTC 之间的毫秒差,同时考虑原始偏移和夏令时的影响。
int getOffset(long date) 在给定时间返回此时区与 UTC 的偏移量。
int getRawOffset() 获取此时区的 GMT 偏移量。
int hashCode() 为 SimpleDateFormat 对象生成哈希码。
boolean hasSameRules(TimeZone other) 如果此区域与另一个区域具有相同的规则和偏移量,则返回 true。
boolean inDaylightTime(Date date) 查询给定日期是否处于夏令时。
boolean observesDaylightTime() 如果此 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) 设置夏令时开始年份。
String toString() 返回此时区的字符串表示形式。
boolean useDaylightTime() 查询该时区是否使用夏令时。
从类 java.lang.Object 继承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
从类 java.util.TimeZone 继承的方法
getAvailableIDs, getAvailableIDs, getDefault, getDisplayName, getDisplayName, getDisplayName, getDisplayName, getID, getTimeZone, getTimeZone, setDefault, setID, toZoneId

字段详细信息

STANDARD_TIME

public static final int STANDARD_TIME

指定为标准时间的开始或结束时间模式的常数。

UTC_TIME

public static final int UTC_TIME

指定为 UTC 的开始或结束时间模式的常量。 例如,欧盟规则被指定为 UTC 时间。

WALL_TIME

public static final int WALL_TIME

指定为挂钟时间的开始或结束时间模式的常量。 挂钟时间是开始规则的标准时间,而结束规则的白天时间。

构造函数详细信息

SimpleTimeZone

public SimpleTimeZone(int rawOffset, String ID)

构造一个 SimpleTimeZone,它具有与 GMT 的给定基本时区偏移量和时区 ID,没有夏令时时间表。

参数:

参数名称 参数描述
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)

构造一个 SimpleTimeZone,它具有与 GMT 的给定基本时区偏移量、时区 ID 以及用于开始和结束夏令时的规则。 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 是 Calendar#MONTH 字段值(从 0 开始。例如,0 表示一月)。
startDay 夏令时开始的月份中的哪一天。
startDayOfWeek 从星期几开始的夏令时。
startTime 本地挂钟时间(以毫秒为单位)的夏令时开始时间,在这种情况下为本地标准时间。
endMonth 夏令时结束月份。 Month 是 Calendar#MONTH 字段值(从 0 开始。例如,9 表示 10 月)。
endDay 夏令时结束的月份中的哪一天。
endDayOfWeek 夏令时结束的星期几。
endTime 以本地挂钟时间表示的夏令时结束时间(以一天中的毫秒为单位),在这种情况下为本地夏令时。

Throws:

Throw名称 Throw描述
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)

构造一个 SimpleTimeZone,它具有与 GMT 的给定基本时区偏移量、时区 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 是 Calendar#MONTH 字段值(从 0 开始。例如,0 表示一月)。
startDay 夏令时开始的月份中的哪一天。
startDayOfWeek 从星期几开始的夏令时。 有关此参数的特殊情况,请参见类描述。
startTime 本地挂钟时间中的夏令时开始时间,在这种情况下为本地标准时间。
endMonth 夏令时结束月份。 Month 是 Calendar#MONTH 字段值(从 0 开始。例如,9 表示 10 月)。
endDay 夏令时结束的月份中的哪一天。 有关此参数的特殊情况,请参见类描述。
endDayOfWeek 夏令时结束的星期几。
endTime 本地挂钟时间的夏令时结束时间,在本例中为本地夏令时。
dstSavings 夏令时期间节省的时间(以毫秒为单位)。

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果月份、日期、星期几或时间参数超出了开始或结束规则的范围

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)

构造一个 SimpleTimeZone,它具有与 GMT 的给定基本时区偏移量、时区 ID 以及用于开始和结束夏令时的规则。 此构造函数采用完整的开始和结束规则参数集,包括 startTime 和 endTime 模式。 模式指定挂钟时间或标准时间或 UTC 时间。

参数:

参数名称 参数描述
rawOffset 给定的基准时区与 GMT 的偏移量。
ID 赋予此对象的时区 ID。
startMonth 夏令时开始月份。 Month 是 Calendar#MONTH 字段值(从 0 开始。例如,0 表示一月)。
startDay 夏令时开始的月份中的哪一天。
startDayOfWeek 从星期几开始的夏令时。
startTime startTimeMode 指定的时间模式下的夏令时开始时间。
startTimeMode startTime 指定的开始时间的模式。
endMonth 夏令时结束月份。 Month 是 Calendar#MONTH 字段值(从 0 开始。例如,9 表示 10 月)。
endDay 夏令时结束的月份中的哪一天。
endDayOfWeek 夏令时结束的星期几。
endTime endTimeMode 指定的时间模式下的夏令时结束时间。
endTimeMode endTime 指定的结束时间的模式
dstSavings 夏令时期间节省的时间(以毫秒为单位)。

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果月份、日期、星期几、更多时间或时间参数超出了开始或结束规则的范围,或者时间模式值无效。

方法详情

setStartYear

public void setStartYear(int year)

设置夏令时开始年份。

参数:

参数名称 参数描述
year 夏令时开始年份。

setStartRule

public void setStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime)

设置夏令时开始规则。 例如,如果夏令时从 4 月的第一个星期日在本地挂钟时间凌晨 2 点开始,您可以通过调用来设置开始规则:

setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2*60*60*1000);

参数:

参数名称 参数描述
startMonth 夏令时开始月份。 Month 是 Calendar#MONTH 字段值(从 0 开始。例如,0 表示一月)。
startDay 夏令时开始的月份中的哪一天。
startDayOfWeek 从星期几开始的夏令时。
startTime 本地挂钟时间中的夏令时开始时间,在这种情况下为本地标准时间。

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果 startMonth、startDay、startDayOfWeek 或 startTime 参数超出范围

setStartRule

public void setStartRule(int startMonth, int startDay, int startTime)

将夏令时开始规则设置为一个月内的固定日期。 该方法等价于:

setStartRule(startMonth, startDay, 0, startTime)

参数:

参数名称 参数描述
startMonth 夏令时开始月份。 Month 是 Calendar#MONTH 字段值(从 0 开始。例如,0 表示一月)。
startDay 夏令时开始的月份中的哪一天。
startTime 本地挂钟时间中的夏令时开始时间,在这种情况下为本地标准时间。

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果 startMonth、startDayOfMonth 或 startTime 参数超出范围

setStartRule

public void setStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime, boolean after)

将夏令时开始规则设置为一个月内给定日期之前或之后的工作日,例如,第一个星期一在 8 日或之后。

参数:

参数名称 参数描述
startMonth 夏令时开始月份。 Month 是 Calendar#MONTH 字段值(从 0 开始。例如,0 表示一月)。
startDay 夏令时开始的月份中的哪一天。
startDayOfWeek 从星期几开始的夏令时。
startTime 本地挂钟时间中的夏令时开始时间,在这种情况下为本地标准时间。
after 如果为 true,则此规则选择 dayOfMonth 或之后的第一天 dayOfWeek。 如果为 false,则此规则选择 dayOfMonth 或之前的最后 dayOfWeek。

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果 startMonth、startDay、startDayOfWeek 或 startTime 参数超出范围

setEndRule

public void setEndRule(int endMonth, int endDay, int endDayOfWeek, int endTime)

设置夏令时结束规则。 例如,如果夏令时在 10 月的最后一个星期日凌晨 2 点在挂钟时间结束,您可以通过调用设置结束规则: setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 26060*1000);

参数:

参数名称 参数描述
endMonth 夏令时结束月份。 Month 是 Calendar#MONTH 字段值(从 0 开始。例如,9 表示 10 月)。
endDay 夏令时结束的月份中的哪一天。
endDayOfWeek 夏令时结束的星期几。
endTime 以本地挂钟时间表示的夏令时结束时间(以一天中的毫秒为单位),在这种情况下为本地夏令时。

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果 endMonth、endDay、endDayOfWeek 或 endTime 参数超出范围

setEndRule

public void setEndRule(int endMonth, int endDay, int endTime)

将夏令时结束规则设置为一个月内的固定日期。 该方法等价于:

setEndRule(endMonth, endDay, 0, endTime)

参数:

参数名称 参数描述
endMonth 夏令时结束月份。 Month 是 Calendar#MONTH 字段值(从 0 开始。例如,9 表示 10 月)。
endDay 夏令时结束的月份中的哪一天。
endTime 以本地挂钟时间表示的夏令时结束时间(以一天中的毫秒为单位),在这种情况下为本地夏令时。

Throws:

Throw名称 Throw描述
IllegalArgumentException endMonth、endDay 或 endTime 参数超出范围

setEndRule

public void setEndRule(int endMonth, int endDay, int endDayOfWeek, int endTime, boolean after)

将夏令时结束规则设置为一个月内给定日期之前或之后的工作日,例如,第一个星期一在 8 号或之后。

参数:

参数名称 参数描述
endMonth 夏令时结束月份。 Month 是 Calendar#MONTH 字段值(从 0 开始。例如,9 表示 10 月)。
endDay 夏令时结束的月份中的哪一天。
endDayOfWeek 夏令时结束的星期几。
endTime 以本地挂钟时间表示的夏令时结束时间(以一天中的毫秒为单位),在这种情况下为本地夏令时。
after 如果为 true,则此规则选择 endDay 或之后的第一个 endDayOfWeek。 如果为 false,则此规则选择该月的 endDay 或之前的最后一个 endDayOfWeek。

Throws:

Throw名称 Throw描述
IllegalArgumentException endMonth、endDay、endDayOfWeek 或 endTime 参数超出范围

getOffset

public int getOffset(long date)

在给定时间返回此时区与 UTC 的偏移量。 如果夏令时在给定时间有效,则偏移值将根据夏令时进行调整。

覆盖:

类 TimeZone 中的 getOffset

参数:

参数名称 参数描述
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) 而不是调用此方法。

指定者:

类 TimeZone 中的 getOffset

参数:

参数名称 参数描述
era 给定日期的时代。
year 给定日期的年份。
month 给定日期中的月份。 月份是从 0 开始的。 例如,0 表示一月。
day 给定日期的月份中的某一天。
dayOfWeek 给定日期的星期几。
millis 标准本地时间中一天中的毫秒数。

返回:

添加到 UTC 以获取本地时间的毫秒数。

Throws:

Throw名称 Throw描述
IllegalArgumentException 时代、月、日、dayOfWeek 或 millis 参数超出范围

getRawOffset

public int getRawOffset()

获取此时区的 GMT 偏移量。

指定者:

类 TimeZone 中的 getRawOffset

返回:

以毫秒为单位的 GMT 偏移值

setRawOffset

public void setRawOffset(int offsetMillis)

将基准时区偏移设置为 GMT。 这是添加到 UTC 以获取本地时间的偏移量。

指定者:

类 TimeZone 中的 setRawOffset

参数:

参数名称 参数描述
offsetMillis 给定的基准时区偏移到 GMT。

setDSTSavings

public void setDSTSavings(int millisSavedDuringDST)

设置时钟在夏令时提前的时间量(以毫秒为单位)。

参数:

参数名称 参数描述
millisSavedDuringDST 当夏令时规则生效时,时间相对于标准时间提前的毫秒数。 一个正数,通常为一小时 (3600000)。

getDSTSavings

public int getDSTSavings()

返回在夏令时期间时钟提前的时间量(以毫秒为单位)。

覆盖:

类 TimeZone 中的 getDSTSavings

返回:

夏令时规则生效时时间相对于标准时间提前的毫秒数,如果此时区不遵守夏令时,则为 0(零)。

useDaylightTime

public boolean useDaylightTime()

查询该时区是否使用夏令时。

指定者:

类 TimeZone 中的 useDaylightTime

返回:

如果此时区使用夏令时,则为 true; 否则为 false。

observesDaylightTime

public boolean observesDaylightTime()

如果此 SimpleTimeZone 遵守夏令时,则返回 true。 此方法等效于 useDaylightTime()。

覆盖:

在 TimeZone 类中观察DaylightTime

返回:

如果此 SimpleTimeZone 遵守夏令时,则为 true; 否则为 false。

inDaylightTime

public boolean inDaylightTime(Date date)

查询给定日期是否处于夏令时。

指定者:

类 TimeZone 中的 inDaylightTime

参数:

参数名称 参数描述
date 给定的日期。

返回:

如果夏令时在给定日期有效,则为 true; 否则为 false。

clone

public Object clone()

返回此 SimpleTimeZone 实例的克隆。

覆盖:

在 TimeZone 类中克隆

返回:

此实例的克隆。

hashCode

public int hashCode()

为 SimpleDateFormat 对象生成哈希码。

覆盖:

类 Object 中的 hashCode

返回:

此对象的哈希码

equals

public boolean equals(Object obj)

比较两个 SimpleTimeZone 对象的相等性。

覆盖:

类 Object 中的等于

参数:

参数名称 参数描述
obj 要与之比较的 SimpleTimeZone 对象。

返回:

如果给定的 obj 与此 SimpleTimeZone 对象相同,则为 true; 否则为 false。

hasSameRules

public boolean hasSameRules(TimeZone other)

如果此区域与另一个区域具有相同的规则和偏移量,则返回 true。

覆盖:

类 TimeZone 中的 hasSameRules

参数:

参数名称 参数描述
other 要与之比较的 TimeZone 对象

返回:

如果给定区域是 SimpleTimeZone 并且具有与此相同的规则和偏移量,则为 true

toString

public String toString()

返回此时区的字符串表示形式。

覆盖:

类 Object 中的 toString

返回:

此时区的字符串表示形式。