Класс ZoneRules
- Все реализуемые интерфейсы:
Serializable
public final class ZoneRules extends Object implements Serializable
Правила моделируют все исторические и будущие переходы часового пояса. ZoneOffsetTransition используется для известных переходов, обычно исторических. ZoneOffsetTransitionRule используется для будущих переходов, определяемых результатом алгоритма.
Правила загружаются через ZoneRulesProvider с помощью ZoneId. Одни и те же правила могут совместно использоваться несколькими идентификаторами часовых поясов.
Сериализация экземпляра ZoneRules сохраняет полный набор правил. Идентификатор часового пояса не сохраняется, поскольку он не является частью состояния этого объекта.
Реализация правил может хранить или не хранить полную информацию об исторических и будущих переходах; точность сохранённой информации не превышает точность данных, предоставленных реализации поставщиком правил. Приложениям следует считать предоставленные данные наилучшей доступной реализации этих правил информацией.
- Требования к реализации:
- Этот класс является неизменяемым и потокобезопасным.
- Начиная с:
- 1.8
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Проверяет, равен ли этот набор правил другому набору. |
Duration |
getDaylightSavings |
Возвращает величину действующего летнего времени для указанного момента в этом часовом поясе. |
ZoneOffset |
getOffset |
Возвращает смещение, применимое к указанному моменту согласно этим правилам. |
ZoneOffset |
getOffset |
Возвращает подходящее смещение для указанной локальной даты и времени согласно этим правилам. |
ZoneOffset |
getStandardOffset |
Возвращает стандартное смещение для указанного момента в этом часовом поясе. |
ZoneOffsetTransition |
getTransition |
Возвращает переход смещения, применимый к указанным локальным дате и времени согласно этим правилам. |
List |
getTransitionRules() |
Возвращает список правил переходов для лет, следующих за годами, определёнными в списке переходов. |
List |
getTransitions() |
Возвращает полный список полностью определённых переходов. |
List |
getValidOffsets |
Возвращает смещение, применимое к указанным локальным дате и времени согласно этим правилам. |
int |
hashCode() |
Возвращает подходящий хеш-код согласно определению #equals. |
boolean |
isDaylightSavings |
Проверяет, действует ли летнее время в указанный момент. |
boolean |
isFixedOffset() |
Проверяет, являются ли правила часового пояса фиксированными, то есть никогда ли не меняется смещение. |
boolean |
isValidOffset |
Проверяет, допустимы ли дата и время со смещением согласно этим правилам. |
ZoneOffsetTransition |
nextTransition |
Возвращает следующий переход после указанного момента. |
static ZoneRules |
of |
Создаёт экземпляр ZoneRules с фиксированными правилами часового пояса. |
static ZoneRules |
of |
Создаёт экземпляр ZoneRules. |
ZoneOffsetTransition |
previousTransition |
Возвращает предыдущий переход перед указанным моментом. |
String |
toString() |
Возвращает строковое представление этого объекта. |
Подробное описание методов
of
public static ZoneRules of(ZoneOffset baseStandardOffset, ZoneOffset baseWallOffset, List<ZoneOffsetTransition> standardOffsetTransitionList, List<ZoneOffsetTransition> transitionList, List<ZoneOffsetTransitionRule> lastRules)
- Параметры:
-
baseStandardOffset— стандартное смещение, используемое до введения законодательных правил; не должно быть null -
baseWallOffset— местное смещение, используемое до введения законодательных правил; не должно быть null -
standardOffsetTransitionList— список изменений стандартного смещения; не должен быть null -
transitionList— список переходов; не должен быть null -
lastRules— повторяющиеся последние правила; размер не более 16; не должен быть null - Возвращает:
- правила часового пояса; не должны быть null
of
public static ZoneRules of(ZoneOffset offset)
- Параметры:
-
offset— смещение, на котором основаны эти фиксированные правила часового пояса; не должно быть null - Возвращает:
- правила часового пояса; не должны быть null
- См. также:
isFixedOffset
public boolean isFixedOffset()
- Возвращает:
- true, если часовой пояс фиксирован и смещение никогда не меняется
getOffset
public ZoneOffset getOffset(Instant instant)
Сопоставление момента со смещением не представляет сложности: для каждого момента существует только одно допустимое смещение. Этот метод возвращает это смещение.
- Параметры:
-
instant— момент, для которого нужно найти смещение; не должен быть null, однако значение null может игнорироваться, если правила задают одно смещение для всех моментов - Возвращает:
- смещение; не должно быть null
getOffset
public ZoneOffset getOffset(LocalDateTime localDateTime)
Сопоставление локальных даты и времени со смещением не представляет сложности. Возможны три случая:
- Обычный случай: одно допустимое смещение. На протяжении большей части года действует обычный случай, когда для локальных даты и времени существует одно допустимое смещение.
- Разрыв: нет допустимых смещений. Это происходит, когда часы переводят вперёд, обычно при весеннем переходе на летнее время — с «зимнего» на «летнее». Во время разрыва существуют значения локальных даты и времени, для которых нет допустимого смещения.
- Перекрытие: два допустимых смещения. Это происходит, когда часы переводят назад, обычно при осеннем переходе на летнее время — с «летнего» на «зимнее». Во время перекрытия существуют значения локальных даты и времени с двумя допустимыми смещениями.
Поскольку в случае разрыва или перекрытия возвращаемое смещение является «наилучшим», а не «правильным», использовать его следует осторожно. Приложениям, которым требуется правильное смещение, следует использовать этот метод вместе с методами getValidOffsets(LocalDateTime) и getTransition(LocalDateTime).
- Параметры:
-
localDateTime— локальные дата и время для запроса; не должны быть null, однако значение null может игнорироваться, если правила задают одно смещение для всех моментов - Возвращает:
- наилучшее доступное смещение для локальных даты и времени; не должно быть null
getValidOffsets
public List<ZoneOffset> getValidOffsets(LocalDateTime localDateTime)
Сопоставление локальных даты и времени со смещением не представляет сложности. Возможны три случая:
- Обычный случай: одно допустимое смещение. На протяжении большей части года действует обычный случай, когда для локальных даты и времени существует одно допустимое смещение.
- Разрыв: нет допустимых смещений. Это происходит, когда часы переводят вперёд, обычно при весеннем переходе на летнее время — с «зимнего» на «летнее». Во время разрыва существуют значения локальных даты и времени, для которых нет допустимого смещения.
- Перекрытие: два допустимых смещения. Это происходит, когда часы переводят назад, обычно при осеннем переходе на летнее время — с «летнего» на «зимнее». Во время перекрытия существуют значения локальных даты и времени с двумя допустимыми смещениями.
Существует несколько способов обработать преобразование LocalDateTime. Например, можно использовать этот метод следующим образом:
List<ZoneOffset> validOffsets = rules.getValidOffsets(localDT);
if (validOffsets.size() == 1) {
// Normal case: only one valid offset
zoneOffset = validOffsets.get(0);
} else {
// Gap or Overlap: determine what to do from transition (which will be non-null)
ZoneOffsetTransition trans = rules.getTransition(localDT);
}
Теоретически допустимых смещений может быть больше двух. Это произошло бы, если бы часы переводили назад несколько раз за короткий промежуток времени. В истории часовых поясов такого никогда не случалось, поэтому специальная обработка для этого случая не предусмотрена. Однако, если бы это произошло, список содержал бы более двух элементов.
- Параметры:
-
localDateTime— локальные дата и время, для которых нужно запросить допустимые смещения; не должны быть null, однако значение null может игнорироваться, если правила задают одно смещение для всех моментов - Возвращает:
- список допустимых смещений; может быть неизменяемым; не должен быть null
getTransition
public ZoneOffsetTransition getTransition(LocalDateTime localDateTime)
Сопоставление локальных даты и времени со смещением не представляет сложности. Возможны три случая:
- Обычный случай: одно допустимое смещение. На протяжении большей части года действует обычный случай, когда для локальных даты и времени существует одно допустимое смещение.
- Разрыв: нет допустимых смещений. Это происходит, когда часы переводят вперёд, обычно при весеннем переходе на летнее время — с «зимнего» на «летнее». Во время разрыва существуют значения локальных даты и времени, для которых нет допустимого смещения.
- Перекрытие: два допустимых смещения. Это происходит, когда часы переводят назад, обычно при осеннем переходе на летнее время — с «летнего» на «зимнее». Во время перекрытия существуют значения локальных даты и времени с двумя допустимыми смещениями.
Существует несколько способов обработать преобразование LocalDateTime. Например, можно использовать этот метод следующим образом:
ZoneOffsetTransition trans = rules.getTransition(localDT);
if (trans != null) {
// Gap or Overlap: determine what to do from transition
} else {
// Normal case: only one valid offset
zoneOffset = rule.getOffset(localDT);
}
- Параметры:
-
localDateTime— локальные дата и время, для которых нужно запросить переход смещения; не должны быть null, однако значение null может игнорироваться, если правила задают одно смещение для всех моментов - Возвращает:
- переход смещения; null, если локальные дата и время не попадают на переход
getStandardOffset
public ZoneOffset getStandardOffset(Instant instant)
Предоставляет доступ к историческим сведениям об изменении стандартного смещения с течением времени. Стандартное смещение — это смещение до применения летнего времени. Обычно оно действует зимой.
- Параметры:
-
instant— момент, для которого нужно найти сведения о смещении; не должен быть null, однако значение null может игнорироваться, если правила задают одно смещение для всех моментов - Возвращает:
- стандартное смещение; не должно быть null
getDaylightSavings
public Duration getDaylightSavings(Instant instant)
Предоставляет доступ к историческим сведениям об изменении величины летнего времени с течением времени. Это разница между стандартным и фактическим смещениями. Обычно зимой эта величина равна нулю, а летом — одному часу. В часовых поясах смещение задаётся в секундах, поэтому наносекундная часть длительности будет равна нулю.
Эта реализация по умолчанию вычисляет длительность на основе смещений, возвращаемых методами actual и standard.
- Параметры:
-
instant— момент, для которого нужно найти величину летнего времени; не должен быть null, однако значение null может игнорироваться, если правила задают одно смещение для всех моментов - Возвращает:
- разница между стандартным и фактическим смещениями; не должна быть null
isDaylightSavings
public boolean isDaylightSavings(Instant instant)
Проверяет, совпадают ли стандартное и фактическое смещения в указанный момент. Если они не совпадают, считается, что действует летнее время.
Эта реализация по умолчанию сравнивает смещения, возвращаемые методами actual и standard.
- Параметры:
-
instant— момент, для которого нужно проверить действие летнего времени; не должен быть null, однако значение null может игнорироваться, если правила задают одно смещение для всех моментов - Возвращает:
- true, если в указанный момент действует летнее время; в противном случае false.
isValidOffset
public boolean isValidOffset(LocalDateTime localDateTime, ZoneOffset offset)
Чтобы значение было допустимым, локальные дата и время не должны попадать на разрыв, а смещение должно совпадать с одним из допустимых смещений.
Эта реализация по умолчанию проверяет, содержит ли список, возвращаемый методом getValidOffsets(java.time.LocalDateTime), указанное смещение.
- Параметры:
-
localDateTime— дата и время для проверки; не должны быть null, однако значение null может игнорироваться, если правила задают одно смещение для всех моментов -
offset— смещение для проверки; значение null возвращает false - Возвращает:
- true, если дата и время со смещением допустимы согласно этим правилам
nextTransition
public ZoneOffsetTransition nextTransition(Instant instant)
Возвращает сведения о следующем переходе после указанного момента. Например, если момент соответствует периоду действия летнего времени, метод вернёт переход к следующему «зимнему» времени.
- Параметры:
-
instant— момент, после которого нужно найти следующий переход; не должен быть null, однако значение null может игнорироваться, если правила задают одно смещение для всех моментов - Возвращает:
- следующий переход после указанного момента; null, если этот момент находится после последнего перехода
previousTransition
public ZoneOffsetTransition previousTransition(Instant instant)
Возвращает сведения о предыдущем переходе перед указанным моментом. Например, если момент соответствует периоду действия летнего времени, метод вернёт переход с предыдущего «зимнего» времени.
- Параметры:
-
instant— момент, перед которым нужно найти предыдущий переход; не должен быть null, однако значение null может игнорироваться, если правила задают одно смещение для всех моментов - Возвращает:
- предыдущий переход перед указанным моментом; null, если этот момент находится перед первым переходом
getTransitions
public List<ZoneOffsetTransition> getTransitions()
Полный набор переходов для этого экземпляра правил определяется этим методом и методом getTransitionRules(). Этот метод возвращает полностью определённые переходы. Обычно они относятся к прошлому, но могут относиться и к будущему.
Список будет пуст для правил с фиксированным смещением и для любого часового пояса, в котором всегда было только одно смещение. Список также будет пуст, если правила переходов неизвестны.
- Возвращает:
- неизменяемый список полностью определённых переходов; не должен быть null
getTransitionRules
public List<ZoneOffsetTransitionRule> getTransitionRules()
Полный набор переходов для этого экземпляра правил определяется этим методом и методом getTransitions(). Этот метод возвращает экземпляры ZoneOffsetTransitionRule, задающие алгоритм определения времени переходов.
Для любого заданного ZoneRules этот список содержит правила переходов для лет, следующих за годами, переходы для которых определены полностью. Обычно эти правила относятся к будущим изменениям правил летнего времени.
Если в часовом поясе предусмотрено летнее время в будущем, список обычно содержит два элемента со сведениями о начале и окончании действия летнего времени. Если в часовом поясе не используется летнее время или сведения о будущих изменениях неопределённы, список будет пуст.
Список будет пуст для правил с фиксированным смещением и для любого часового пояса, в котором не используется летнее время. Список также будет пуст, если правила переходов неизвестны.
- Возвращает:
- неизменяемый список правил переходов; не должен быть null
equals
public boolean equals(Object otherRules)
Два набора правил равны, если для любых заданных моментов или локальных даты и времени они всегда дают одинаковый результат. Наборы правил из разных групп могут возвращать false, даже если фактически они совпадают.
Это определение предполагает, что реализации сравнивают всё своё состояние.
hashCode
toString
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/time/zone/ZoneRules.html