Класс 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);
}
Теоретически возможно, что может быть более двух допустимых смещений. Это произойдет, если часы будут переводиться назад более одного раза в быстрой последовательности. Такого никогда не было в истории часовых поясов, поэтому нет специальной обработки. Однако если это произойдет, то список вернёт более 2 элементов.
- Параметры:
-
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, если смещение даты и времени допустимо для этих правил
следующаяПереход
public ZoneOffsetTransition nextTransition(Instant instant)
Возвращает сведения о следующем переходе после указанного момента времени. Например, если момент времени соответствует моменту, когда действует летнее время, то метод вернёт переход к следующему зимнему времени.
- Параметры:
-
instant- момент времени, для которого необходимо получить следующий переход, не null, но null может быть проигнорирован, если правила имеют единственное смещение для всех моментов времени - Возвращает:
- следующий переход после указанного момента времени, null, если это после последнего перехода
предыдущийПереход
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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/time/zone/ZoneRules.html