Класс 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() |
Возвращает строковое описание этого объекта. |
Методы, объявленные в классе Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удален в будущей версии. Финализация считается устаревшей и может быть удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс среды выполнения этого Object. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо истечения указанного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо истечения указанного промежутка реального времени. |
Подробное описание методов
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)
Два набора правил равны, если они всегда дают одинаковый результат для любого заданного момента или местных даты и времени. Правила из двух разных групп могут считаться неравными, даже если фактически они одинаковы.
Согласно этому определению, реализации должны сравнивать все свое состояние.
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.