public abstract class ZoneRulesProvider extends Object
这个类管理时区规则的配置。静态方法提供了可以用于管理供应商的公共的可用接口。抽象方法提供SPI允许规则将提供。
zonerulesprovider可以安装在java平台的一个实例的扩展类,即JAR文件放置到任何常见的推广目录。安装商使用服务提供商的加载装置的加载ServiceLoader
类定义。一个zonerulesprovider标识本身具有的资源目录META-INF/services
命名java.time.zone.ZoneRulesProvider
供应商配置文件。该文件应包含一行指定完全限定的具体zonerules提供者类名称。供应商也可以通过将它们添加到类路径或通过注册自己registerProvider(java.time.zone.ZoneRulesProvider)
法获得通过。
java虚拟机有一个默认的提供程序提供的时间由IANA时区数据库定义区规则(零时介质击穿)。如果系统性能java.time.zone.DefaultZoneRulesProvider
定义则采取的是完全合格的名称的一个具体的zonerulesprovider类作为默认的提供程序加载,使用系统类加载器。如果没有定义此系统属性,将加载系统默认提供程序作为默认的提供者服务。
规则是看主要由带身份证,所使用的ZoneId
。只有区域区域的入侵检测系统可以使用,这里没有使用区域偏移量的入侵检测系统。
时区规则是政治的,因此数据可以在任何时候改变。每个提供者将为每个区域的标识提供最新的规则,但它们也可以提供规则更改的历史。
供应商必须确保一旦应用程序看到了一个规则,该规则必须继续可用。
供应商被鼓励去实现有意义的toString
方法。
许多系统要更新时区规则动态不停的JVM。当检查的细节,这是一个复杂的问题。供应商可以选择处理动态更新,但是默认提供程序不处理。
Modifier | Constructor and Description |
---|---|
protected |
ZoneRulesProvider()
构造函数。
|
Modifier and Type | Method and Description |
---|---|
static Set<String> |
getAvailableZoneIds()
获取可用区域标识集的集合。
|
static ZoneRules |
getRules(String zoneId, boolean forCaching)
获取区域标识的规则。
|
static NavigableMap<String,ZoneRules> |
getVersions(String zoneId)
获取区域标识的规则的历史。
|
protected boolean |
provideRefresh()
SPI的方法从底层数据提供商刷新规则。
|
protected abstract ZoneRules |
provideRules(String zoneId, boolean forCaching)
SPI的方法得到的规则区域ID。
|
protected abstract NavigableMap<String,ZoneRules> |
provideVersions(String zoneId)
SPI方法得到的区域ID规则的历史
|
protected abstract Set<String> |
provideZoneIds()
SPI的方法得到的可用区域入侵检测系统。
|
static boolean |
refresh()
刷新规则从底层数据提供商。
|
static void |
registerProvider(ZoneRulesProvider provider)
注册一个区域规则提供程序。
|
public static Set<String> getAvailableZoneIds()
这些ID是一个ZoneId
字符串形式。
public static ZoneRules getRules(String zoneId, boolean forCaching)
这将返回该区域的最新可用的规则。
此方法依赖于配置的时区数据提供程序文件。这些都是用ServiceLoader
加载。
缓存标志的设计允许提供者实现防止规则被缓存在ZoneId
。正常情况下,缓存区的规定是非常可取的因为它将提供更高的性能。然而,有一个使用的情况下,缓存并不可取,看到provideRules(java.lang.String, boolean)
。
zoneId
-区ID所定义的
ZoneId
,不空
forCaching
是否规定正在查询缓存,如果返回的规则将被缓存的
ZoneId
真,假如果他们将返回给用户,而不被缓存在
ZoneId
forCaching
是真实的,这是一个动态的供应商,要防止缓存
ZoneId
空,否则不为空
ZoneRulesException
如果规则不能得到的区域ID
public static NavigableMap<String,ZoneRules> getVersions(String zoneId)
时区是由政府定义的,经常改变。这种方法允许应用程序发现为单区IDMap键的字符串的规则变化的历史,这是与规则相关的版本字符串。
版本的确切含义和格式是提供特定的。版本必须按照字典顺序,因此返回的Map将从已知的最古老的规则,最新可用的规则秩序。默认的“零时介质击穿的组使用版本编号由年后跟一个字母,如“年”或“2012F”。
实现必须为每个有效区域标识提供一个结果,但是他们不需要提供规则的历史。因此,Map将总是包含一个元素,并且只包含一个元素,如果历史规则信息可用。
规则的历史zoneId
-区ID所定义的
ZoneId
,不空
ZoneRulesException
如果得到的区域ID是历史不能
public static void registerProvider(ZoneRulesProvider provider)
这增加了一个新的供应商,目前可用的。一个提供程序提供一个或多个区域标识的规则。如果提供了已注册的区域标识,则提供程序无法注册。看在ZoneId
时区ID的笔记,特别是对使用的概念,一个“组”使IDS独特。
为确保时区已创建的完整性,有没有办法注销商。
provider
-供应商登记,不空
ZoneRulesException
-如果区域标识已注册
public static boolean refresh()
此方法允许应用程序请求提供程序检查所提供的规则的任何更新。调用此方法后,存储在任何ZonedDateTime
偏移可能无效的区域ID。
规则的动态更新是一个复杂的问题,大多数应用程序不应该使用这个方法或动态规则。要实现动态规则,供应商的实现将必须按照本类的规范编写。此外,ZoneRules
实例不能被缓存在应用程序会变得陈旧。然而,在provideRules(String, boolean)
布尔标志允许提供者来控制缓存ZoneId
,可能使系统中的所有对象看到新规则。请注意,有可能是一个动态的规则提供程序的性能成本。请注意,没有动态规则提供程序在本规范中。
ZoneRulesException
-如果在刷新时发生错误
protected abstract Set<String> provideZoneIds()
得出这ZoneRulesProvider
提供入侵检测系统。提供者应为至少一个区域标识提供数据。
返回区域的入侵检测系统仍然可用,有效期为应用程序的生命期。一个动态的提供者可以增加一组的入侵检测系统作为更多的数据可用。
ZoneRulesException
-如果出现问题而提供的ID
protected abstract ZoneRules provideRules(String zoneId, boolean forCaching)
加载指定的区域ID提供商实现必须验证区ID是有效的和可用的规则,把ZoneRulesException
如果不是。有效的情况下的方法的结果取决于缓存标志。
如果提供程序实现的是不动态的,那么该方法的结果必须是由身份证选择的非空集合。
如果提供程序实现是动态的,那么该标志给出防止返回的规则被缓存在ZoneId
选项。当国旗是真的,供应商被允许返回null,而空将防止规则被缓存在ZoneId
。当标记为错误时,提供程序必须返回非空规则。
zoneId
-区ID所定义的
ZoneId
,不空
forCaching
是否规定正在查询缓存,如果返回的规则将被缓存的
ZoneId
真,假如果他们将返回给用户,而不被缓存在
ZoneId
forCaching
是真实的,这是一个动态的供应商,要防止缓存
ZoneId
空,否则不为空
ZoneRulesException
如果规则不能得到的区域ID
protected abstract NavigableMap<String,ZoneRules> provideVersions(String zoneId)
这是返回一个Map的历史规则的版本字符串键。版本的确切含义和格式是提供特定的。版本必须按照字典顺序,因此返回的Map将从已知的最古老的规则,最新可用的规则秩序。默认的“零时介质击穿的组使用版本编号由年后跟一个字母,如“年”或“2012F”。
实现必须为每个有效区域标识提供一个结果,但是他们不需要提供规则的历史。因此,映射将包含至少一个元素,如果历史规则信息可用,则只包含一个元素以上的元素。
返回的版本仍然可用,并有效的应用程序的生命期。一个动态提供程序可能会增加版本的集合,因为更多的数据可用。
规则的历史zoneId
-区ID所定义的
ZoneId
,不空
ZoneRulesException
如果得到的区域ID是历史不能
protected boolean provideRefresh()
这种方法提供了一个供应商动态复查基础数据提供商找到新规则的机会。这可以用来承载新的规则不停的JVM。动态行为是完全可选的,大多数供应商不支持它。
此实现返回假。
ZoneRulesException
-如果在刷新时发生错误
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.