java.time.zone.ZoneRulesProvider类的使用及代码示例

x33g5p2x  于2022-02-05 转载在 其他  
字(8.0k)|赞(0)|评价(0)|浏览(125)

本文整理了Java中java.time.zone.ZoneRulesProvider类的一些代码示例,展示了ZoneRulesProvider类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。ZoneRulesProvider类的具体详情如下:
包路径:java.time.zone.ZoneRulesProvider
类名称:ZoneRulesProvider

ZoneRulesProvider介绍

[英]Provider of time-zone rules to the system.

This class manages the configuration of time-zone rules. The static methods provide the public API that can be used to manage the providers. The abstract methods provide the SPI that allows rules to be provided.

Rules are looked up primarily by zone ID, as used by ZoneId. Only zone region IDs may be used, zone offset IDs are not used here.

Time-zone rules are political, thus the data can change at any time. Each provider will provide the latest rules for each zone ID, but they may also provide the history of how the rules changed.

Specification for implementors

This interface is a service provider that can be called by multiple threads. Implementations must be immutable and thread-safe.

Providers must ensure that once a rule has been seen by the application, the rule must continue to be available.

Many systems would like to update time-zone rules dynamically without stopping the JVM. When examined in detail, this is a complex problem. Providers may choose to handle dynamic updates, however the default provider does not.
[中]向系统提供时区规则。
此类管理时区规则的配置。静态方法提供了可用于管理提供者的公共API。抽象方法提供允许提供规则的SPI。
规则主要由ZoneId使用的zone ID查找。只能使用区域ID,此处不使用区域偏移ID。
时区规则是政治性的,因此数据可以随时更改。每个提供者将为每个区域ID提供最新的规则,但也可能提供规则更改的历史记录。
####实施者规范
这个接口是一个可以被多个线程调用的服务提供者。实现必须是不可变的和线程安全的。
提供者必须确保,一旦应用程序看到规则,该规则必须继续可用。
许多系统希望在不停止JVM的情况下动态更新时区规则。仔细研究后,这是一个复杂的问题。提供程序可以选择处理动态更新,但默认提供程序不会。

代码示例

代码示例来源:origin: neo4j/neo4j

@Override
  void dump( Logger logger )
  {
    Map<String,Integer> versions = new HashMap<>();
    for ( String tz : ZoneRulesProvider.getAvailableZoneIds() )
    {
      for ( String version : ZoneRulesProvider.getVersions( tz ).keySet() )
      {
        versions.compute( version, ( key, value ) -> value == null ? 1 : (value + 1) );
      }
    }
    String[] sorted = versions.keySet().toArray( new String[0] );
    Arrays.sort( sorted );
    for ( String tz : sorted )
    {
      logger.log( "  TimeZone version: %s (available for %d zone identifiers)", tz, versions.get( tz ) );
    }
  }
},

代码示例来源:origin: io.airlift/joda-to-java-time-bridge

@Override
public Set<String> getAvailableIDs()
{
  return ZoneRulesProvider.getAvailableZoneIds();
}

代码示例来源:origin: com.github.seratch/java-time-backport

/**
 * Gets the rules for the zone ID.
 * <p>
 * This returns the latest available rules for the zone ID.
 * <p>
 * This method relies on time-zone data provider files that are configured.
 * These are loaded using a {@code ServiceLoader}.
 * <p>
 * The caching flag is designed to allow provider implementations to
 * prevent the rules being cached in {@code ZoneId}.
 * Under normal circumstances, the caching of zone rules is highly desirable
 * as it will provide greater performance. However, there is a use case where
 * the caching would not be desirable, see {@link #provideRules}.
 *
 * @param zoneId the zone ID as defined by {@code ZoneId}, not null
 * @param forCaching whether the rules are being queried for caching,
 * true if the returned rules will be cached by {@code ZoneId},
 * false if they will be returned to the user without being cached in {@code ZoneId}
 * @return the rules, null if {@code forCaching} is true and this
 * is a dynamic provider that wants to prevent caching in {@code ZoneId},
 * otherwise not null
 * @throws ZoneRulesException if rules cannot be obtained for the zone ID
 */
public static ZoneRules getRules(String zoneId, boolean forCaching) {
  Jdk8Methods.requireNonNull(zoneId, "zoneId");
  return getProvider(zoneId).provideRules(zoneId, forCaching);
}

代码示例来源:origin: com.github.seratch/java-time-backport

/**
 * Gets the history of rules for the zone ID.
 * <p>
 * Time-zones are defined by governments and change frequently.
 * This method allows applications to find the history of changes to the
 * rules for a single zone ID. The map is keyed by a string, which is the
 * version string associated with the rules.
 * <p>
 * The exact meaning and format of the version is provider specific.
 * The version must follow lexicographical order, thus the returned map will
 * be order from the oldest known rules to the newest available rules.
 * The default 'TZDB' group uses version numbering consisting of the year
 * followed by a letter, such as '2009e' or '2012f'.
 * <p>
 * Implementations must provide a result for each valid zone ID, however
 * they do not have to provide a history of rules.
 * Thus the map will always contain one element, and will only contain more
 * than one element if historical rule information is available.
 *
 * @param zoneId  the zone region ID as used by {@code ZoneId}, not null
 * @return a modifiable copy of the history of the rules for the ID, sorted
 *  from oldest to newest, not null
 * @throws ZoneRulesException if history cannot be obtained for the zone ID
 */
public static NavigableMap<String, ZoneRules> getVersions(String zoneId) {
  Jdk8Methods.requireNonNull(zoneId, "zoneId");
  return getProvider(zoneId).provideVersions(zoneId);
}

代码示例来源:origin: stackoverflow.com

System.out.println(java.time.zone.ZoneRulesProvider.getVersions("UTC").keySet());

代码示例来源:origin: com.github.seratch/java-time-backport

@Override
public ZoneRules getRules() {
  // additional query for group provider when null allows for possibility
  // that the provider was added after the ZoneId was created
  return (rules != null ? rules : ZoneRulesProvider.getRules(id, false));
}

代码示例来源:origin: com.github.seratch/java-time-backport

/**
 * Refreshes the rules from the underlying data provider.
 * <p>
 * This method is an extension point that allows providers to refresh their
 * rules dynamically at a time of the applications choosing.
 * After calling this method, the offset stored in any {@link ZonedDateTime}
 * may be invalid for the zone ID.
 * <p>
 * Dynamic behavior is entirely optional and most providers, including the
 * default provider, do not support it.
 *
 * @return true if the rules were updated
 * @throws ZoneRulesException if an error occurs during the refresh
 */
public static boolean refresh() {
  boolean changed = false;
  for (ZoneRulesProvider provider : PROVIDERS) {
    changed |= provider.provideRefresh();
  }
  return changed;
}

代码示例来源:origin: com.github.seratch/java-time-backport

/**
 * Gets the set of available zone IDs.
 * <p>
 * This set includes the string form of all available region-based IDs.
 * Offset-based zone IDs are not included in the returned set.
 * The ID can be passed to {@link #of(String)} to create a {@code ZoneId}.
 * <p>
 * The set of zone IDs can increase over time, although in a typical application
 * the set of IDs is fixed. Each call to this method is thread-safe.
 *
 * @return a modifiable copy of the set of zone IDs, not null
 */
public static Set<String> getAvailableZoneIds() {
  return ZoneRulesProvider.getAvailableZoneIds();
}

代码示例来源:origin: net.time4j/time4j-olson

public JdkZoneProviderSPI() {
  super();
  this.version = ZoneRulesProvider.getVersions("America/New_York").lastEntry().getKey();
}

代码示例来源:origin: com.github.seratch/java-time-backport

/**
 * Obtains an instance of {@code ZoneId} from an identifier.
 *
 * @param zoneId  the time-zone ID, not null
 * @param checkAvailable  whether to check if the zone ID is available
 * @return the zone ID, not null
 * @throws DateTimeException if the ID format is invalid
 * @throws DateTimeException if checking availability and the ID cannot be found
 */
static ZoneRegion ofId(String zoneId, boolean checkAvailable) {
  Jdk8Methods.requireNonNull(zoneId, "zoneId");
  if (zoneId.length() < 2 || PATTERN.matcher(zoneId).matches() == false) {
    throw new DateTimeException("Invalid ID for region-based ZoneId, invalid format: " + zoneId);
  }
  ZoneRules rules = null;
  try {
    // always attempt load for better behavior after deserialization
    rules = ZoneRulesProvider.getRules(zoneId, true);
  } catch (ZoneRulesException ex) {
    // special case as removed from data file
    if (zoneId.equals("GMT0")) {
      rules = ZoneOffset.UTC.getRules();
    } else if (checkAvailable) {
      throw ex;
    }
  }
  return new ZoneRegion(zoneId, rules);
}

代码示例来源:origin: org.neo4j/neo4j-kernel

@Override
  void dump( Logger logger )
  {
    Map<String,Integer> versions = new HashMap<>();
    for ( String tz : ZoneRulesProvider.getAvailableZoneIds() )
    {
      for ( String version : ZoneRulesProvider.getVersions( tz ).keySet() )
      {
        versions.compute( version, ( key, value ) -> value == null ? 1 : (value + 1) );
      }
    }
    String[] sorted = versions.keySet().toArray( new String[0] );
    Arrays.sort( sorted );
    for ( String tz : sorted )
    {
      logger.log( "  TimeZone version: %s (available for %d zone identifiers)", tz, versions.get( tz ) );
    }
  }
},

代码示例来源:origin: net.time4j/time4j-olson

@Override
public Set<String> getAvailableIDs() {
  return Collections.unmodifiableSet(ZoneRulesProvider.getAvailableZoneIds());
}

代码示例来源:origin: com.github.seratch/java-time-backport

Set<String> regionIds = ZoneRulesProvider.getAvailableZoneIds();
final int regionIdsSize = regionIds.size();
Entry<Integer, SubstringTree> cached = cachedSubstringTree;

相关文章

微信公众号

最新文章

更多