src/share/classes/java/time/ZoneRegion.java

Print this page

        

@@ -111,11 +111,11 @@
     /**
      * Obtains an instance of {@code ZoneRegion} from an identifier without checking
      * if the time-zone has available rules.
      * <p>
      * This method parses the ID and applies any appropriate normalization.
-     * It does not validate the ID against the known set of IDsfor which rules are available.
+     * It does not validate the ID against the known set of IDs for which rules are available.
      * <p>
      * This method is intended for advanced use cases.
      * For example, consider a system that always retrieves time-zone rules from a remote server.
      * Using this factory would allow a {@code ZoneRegion}, and thus a {@code ZonedDateTime},
      * to be created without loading the rules from the remote server.

@@ -133,22 +133,24 @@
      *
      * @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
+     * @throws ZoneRulesException if checking availability and the ID cannot be found
      */
     static ZoneRegion ofId(String zoneId, boolean checkAvailable) {
         Objects.requireNonNull(zoneId, "zoneId");
-        if (zoneId.length() < 2 || zoneId.startsWith("UTC") ||
-                zoneId.startsWith("GMT") || (PATTERN.matcher(zoneId).matches() == false)) {
-            throw new DateTimeException("ZoneId format is not a valid region format");
+        if (zoneId.length() < 2 ||
+                zoneId.startsWith("UT") ||  // includes UTC
+                zoneId.startsWith("GMT") ||
+                (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);
+            rules = ZoneRulesProvider.getRules(zoneId, true);
         } catch (ZoneRulesException ex) {
             if (checkAvailable) {
                 throw ex;
             }
         }

@@ -174,12 +176,12 @@
     }
 
     @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));
+        // that the provider was updated after the ZoneId was created
+        return (rules != null ? rules : ZoneRulesProvider.getRules(id, false));
     }
 
     //-----------------------------------------------------------------------
     /**
      * Writes the object using a