Класс ZoneRulesProvider
public abstract class ZoneRulesProvider extends Object
Этот класс управляет конфигурацией правил часовых поясов. Статические методы предоставляют публичный API для управления поставщиками. Абстрактные методы предоставляют SPI, который позволяет предоставлять правила.
ZoneRulesProvider может быть установлен в экземпляре Java Platform в виде расширяющих классов, то есть jar-файлов, размещенных в любом из обычных каталогов расширений. Установленные поставщики загружаются с использованием механизма загрузки поставщиков услуг, определенного классом ServiceLoader. ZoneRulesProvider идентифицирует себя с помощью файла конфигурации поставщика, названного java.time.zone.ZoneRulesProvider в каталоге ресурсов META-INF/services. Файл должен содержать строку, которая указывает полное имя класса конкретного поставщика zonerules-provider. Поставщики также могут быть доступны путем добавления их в путь к классам или путем регистрации себя через метод registerProvider(java.time.zone.ZoneRulesProvider).
В виртуальной машине Java есть поставщик по умолчанию, который предоставляет правила часовых поясов для часовых поясов, определенных базой данных часовых поясов IANA (TZDB). Если системная переменная java.time.zone.DefaultZoneRulesProvider определена, то она считается полным именем класса конкретного ZoneRulesProvider, который должен быть загружен в качестве поставщика по умолчанию, используя системный загрузчик классов. Если эта системная переменная не определена, то будет загружен системный поставщик по умолчанию, который будет служить поставщиком по умолчанию.
Правила в первую очередь ищут по идентификатору часового пояса, как используется классом ZoneId. Используются только идентификаторы часовых поясов, идентификаторы смещений по часовому поясу здесь не используются.
Правила часового пояса являются политическими, поэтому данные могут меняться в любое время. Каждый поставщик будет предоставлять последние правила для каждого идентификатора часового пояса, но они также могут предоставить историю изменений правил.
- Требования к реализации:
- Этот интерфейс является поставщиком услуг, к которому могут обращаться несколько потоков. Реализации должны быть неизменяемыми и потокобезопасными.
Поставщики должны гарантировать, что как только правило было замечено приложением, правило должно продолжать быть доступным.
Поставщикам рекомендуется реализовать осмысленный метод
toString.Многие системы хотели бы динамически обновлять правила часовых поясов, не останавливая JVM. При детальном рассмотрении это сложная задача. Поставщики могут выбрать обработку динамических обновлений, однако поставщик по умолчанию этого не делает.
- С:
- 1.8
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Set<String> |
getAvailableZoneIds() |
Получает набор доступных идентификаторов часовых поясов. |
static ZoneRules |
getRules |
Получает правила для идентификатора часового пояса. |
static NavigableMap<String, |
getVersions |
Получает историю правил для идентификатора часового пояса. |
protected boolean |
provideRefresh() |
Метод SPI для обновления правил из базового поставщика данных. |
protected abstract ZoneRules |
provideRules |
Метод SPI для получения правил для идентификатора часового пояса. |
protected abstract NavigableMap<String, |
provideVersions |
Метод SPI для получения истории правил для идентификатора часового пояса. |
protected abstract Set<String> |
provideZoneIds() |
Метод SPI для получения доступных идентификаторов часовых поясов. |
static boolean |
refresh() |
Обновляет правила из базового поставщика данных. |
static void |
registerProvider |
Регистрирует поставщик правил часовых поясов. |
Подробное описание конструкторов
ZoneRulesProvider
protected ZoneRulesProvider()
Подробное описание методов
getAvailableZoneIds
public static Set<String> getAvailableZoneIds()
Эти идентификаторы — строковая форма ZoneId.
- Возвращает:
- неизменяемый набор идентификаторов зон, не null
getRules
public static ZoneRules getRules(String zoneId, boolean forCaching)
Возвращает самые последние доступные правила для идентификатора зоны.
Этот метод полагается на файлы поставщика данных часовых поясов, которые настроены. Они загружаются с помощью ServiceLoader.
Флаг кеширования предназначен для того, чтобы поставщики правил могли предотвратить кеширование правил в ZoneId. В обычных ситуациях кеширование правил зон очень желательно, так как оно обеспечит лучшую производительность. Однако есть случай, когда кеширование нежелательно, см. provideRules(java.lang.String, boolean).
- Параметры:
-
zoneId— идентификатор зоны, определенныйZoneId, не null -
forCaching— указывается ли запрос правил для кеширования, true, если возвращаемые правила будут кэшированыZoneId, false, если они будут возвращены пользователю без кеширования вZoneId - Возвращает:
- правила, null, если
forCachingtrue и это динамический поставщик, который хочет предотвратить кеширование вZoneId, иначе не null - Исключение:
-
ZoneRulesException— если правила не могут быть получены для идентификатора зоны
getVersions
public static NavigableMap<String,ZoneRules> getVersions(String zoneId)
Часовые пояса определяются правительствами и часто изменяются. Этот метод позволяет приложениям найти историю изменений правил для одного идентификатора зоны. Карта индексируется строкой, которая представляет собой строку версии правил.
Точное значение и формат версии зависят от поставщика. Версия должна следовать лексикографическому порядку, поэтому возвращаемая карта будет отсортирована от старейших известных правил до самых новых доступных правил. В группе по умолчанию 'TZDB' используется нумерация версий, состоящая из года, за которым следует буква, например, '2009e' или '2012f'.
Реализации должны предоставлять результат для каждого допустимого идентификатора зоны, однако они не обязаны предоставлять историю правил. Таким образом, карта всегда будет содержать один элемент, и она будет содержать более одного элемента только в том случае, если есть информация о исторических правилах.
- Параметры:
-
zoneId— идентификатор зоны, определенныйZoneId, не null - Возвращает:
- изменяемую копию истории правил для идентификатора, отсортированную от старейшей до новейшей, не null
- Исключение:
-
ZoneRulesException— если история не может быть получена для идентификатора зоны
registerProvider
public static void registerProvider(ZoneRulesProvider provider)
Это добавляет нового поставщика к тем, которые сейчас доступны. Поставщик предоставляет правила для одного или нескольких идентификаторов зон. Поставщик не может быть зарегистрирован, если он предоставляет идентификатор зоны, который уже был зарегистрирован. См. Примечания об идентификаторах часовых поясов в ZoneId, особенно раздел об использовании понятия «группы» для создания уникальных идентификаторов.
Для обеспечения целостности уже созданных часовых поясов нет способа отменить регистрацию поставщиков.
- Параметры:
-
provider— регистрируемый поставщик, не null - Исключение:
-
ZoneRulesException— если идентификатор зоны уже зарегистрирован
refresh
public static boolean refresh()
Этот метод позволяет приложению запросить проверку поставщиками наличия обновлений в предоставленных правилах. После вызова этого метода смещение, хранящееся в любом ZonedDateTime, может быть недействительным для идентификатора зоны.
Динамическое обновление правил — сложная проблема, и большинство приложений не должны использовать этот метод или динамические правила. Чтобы добиться динамических правил, реализация поставщика должна быть написана в соответствии со спецификацией этого класса. Кроме того, экземпляры ZoneRules не должны кэшироваться в приложении, так как они устареют. Однако флаг boolean в provideRules(String, boolean) позволяет реализациям поставщиков управлять кешированием ZoneId, потенциально гарантируя, что все объекты в системе увидят новые правила. Обратите внимание, что динамический поставщик правил, вероятно, будет иметь негативное влияние на производительность. Обратите также внимание, что в этой спецификации нет динамических поставщиков правил.
- Возвращает:
- true, если правила были обновлены
- Исключение:
-
ZoneRulesException— если при обновлении произошла ошибка
provideZoneIds
protected abstract Set<String> provideZoneIds()
Получает идентификаторы, которые предоставляет этот ZoneRulesProvider. Поставщик должен предоставлять данные для, по крайней мере, одного идентификатора зоны.
Возвращаемые идентификаторы зон остаются доступными и действительными на протяжении всего срока службы приложения. Динамический поставщик может увеличивать набор идентификаторов по мере получения большего количества данных.
- Возвращает:
- набор идентификаторов зон, предоставляемых поставщиком, не null
- Исключение:
-
ZoneRulesException— если при предоставлении идентификаторов возникла проблема
provideRules
protected abstract ZoneRules provideRules(String zoneId, boolean forCaching)
Загружает правила для указанного идентификатора зоны. Реализация поставщика должна проверить, является ли идентификатор зоны допустимым и доступным, выбросив ZoneRulesException в противном случае. Результат метода в случае корректности зависит от флага кэширования.
Если реализация поставщика не является динамической, то результатом метода должен быть ненулевой набор правил, выбранных по идентификатору.
Если реализация поставщика динамическая, то флаг предоставляет возможность предотвратить кеширование возвращаемых правил в ZoneId. Когда флаг true, поставщик разрешен возвращать null, где null будет предотвращать кеширование правил в ZoneId. Когда флаг false, поставщик должен возвращать ненулевые правила.
- Параметры:
-
zoneId— идентификатор зоны, определенныйZoneId, не null -
forCaching— указывает, запрашиваются ли правила для кэширования, true, если возвращаемые правила будут кэшированыZoneId, false, если они будут возвращены пользователю без кеширования вZoneId - Возвращает:
- правила, null, если
forCachingtrue и это динамический поставщик, который хочет предотвратить кеширование вZoneId, иначе не null - Исключение:
-
ZoneRulesException— если правила не могут быть получены для идентификатора зоны
provideVersions
protected abstract NavigableMap<String,ZoneRules> provideVersions(String zoneId)
Возвращает карту исторических правил, индексируемых строкой версии. Точное значение и формат версии зависят от поставщика. Версия должна следовать лексикографическому порядку, поэтому возвращаемая карта будет отсортирована от старейших известных правил до самых новых доступных правил. В группе по умолчанию 'TZDB' используется нумерация версий, состоящая из года, за которым следует буква, например, '2009e' или '2012f'.
Реализации должны предоставлять результат для каждого допустимого идентификатора зоны, однако они не обязаны предоставлять историю правил. Таким образом, карта будет содержать по крайней мере один элемент, и она будет содержать более одного элемента только в том случае, если есть информация о исторических правилах.
Возвращаемые версии остаются доступными и действительными на протяжении всего срока службы приложения. Динамический поставщик может увеличивать набор версий по мере получения большего количества данных.
- Параметры:
-
zoneId— идентификатор зоны, определенныйZoneId, не null - Возвращает:
- изменяемую копию истории правил для идентификатора, отсортированную от старейшей до новейшей, не null
- Исключение:
-
ZoneRulesException— если история не может быть получена для идентификатора зоны
provideRefresh
protected boolean provideRefresh()
Этот метод предоставляет возможность поставщику динамически повторно проверять базовый поставщик данных, чтобы найти последние правила. Это можно использовать для загрузки новых правил без остановки JVM. Динамическое поведение полностью необязательно, и большинство поставщиков его не поддерживают.
Эта реализация возвращает false.
- Возвращает:
- true, если правила были обновлены
- Исключение:
-
ZoneRulesException— если при обновлении произошла ошибка
© 1993, 2021, 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/17/docs/api/java.base/java/time/zone/ZoneRulesProvider.html