diff --git a/spec/intl.html b/spec/intl.html index a4e86f84..8295246a 100644 --- a/spec/intl.html +++ b/spec/intl.html @@ -52,6 +52,46 @@

Time Zone Identifiers

+ +

AvailableNamedTimeZoneIdentifiers ( ): a List of Time Zone Identifier Records

+
+
description
+
+ Its result describes all available named time zone identifiers in this implementation, as well as the primary time zone identifier corresponding to each available named time zone identifier. + The List is sorted by [[Identifier]] of each Time Zone Identifier Record. +
+
redefinition
+
true
+
+ + 1. Let _identifiers_ be a List containing the String value of each Zone or Link name in the IANA Time Zone Database that is supported by the implementation. + 1. Assert: No element of _identifiers_ is an ASCII-case-insensitive match for any other element. + 1. Assert: Every element of _identifiers_ identifies a Zone or Link name in the IANA Time Zone Database. + 1. Assert: No element of _identifiers_ is an ASCII-case-insensitive match for *"Etc/Unknown"*. + 1. Append *"Etc/Unknown"* to _identifiers_. + 1. Set _identifiers_ to SortStringListByCodeUnit(_identifiers_). + 1. Let _result_ be a new empty List. + 1. For each element _identifier_ of _identifiers_, do + 1. Let _primary_ be _identifier_. + 1. If _identifier_ is a non-primary time zone identifier in this implementation and _identifier_ is not *"UTC"*neither *"UTC"* nor *"Etc/Unknown"*, then + 1. Set _primary_ to the name of the primary time zone identifier that _identifier_ resolves to, according to the rules for resolving Link names in the IANA Time Zone Database. + 1. NOTE: If _identifier_ resolves to another non-primary time zone identifier, then the implementation must continue resolution of the entire chain until its terminal primary time zone identifier. + 1. If _primary_ is one of *"Etc/UTC"*, *"Etc/GMT"*, or *"GMT"*, set _primary_ to *"UTC"*. + 1. Let _record_ be the Time Zone Identifier Record { [[Identifier]]: _identifier_, [[PrimaryIdentifier]]: _primary_ }. + 1. Append _record_ to the end of _result_. + 1. Assert: One element of _result_ is the Time Zone Identifier Record { [[Identifier]]: *"UTC"*, [[PrimaryIdentifier]]: *"UTC"* }. + 1. Return _result_. + + + + Time zone identifiers in the IANA Time Zone Database can change over time. + At a minimum, it is recommended that implementations limit changes to the result of AvailableNamedTimeZoneIdentifiers to the changes allowed by GetAvailableNamedTimeZoneIdentifier, for the lifetime of the surrounding agent. + Due to the complexity of supporting these recommendations, it is recommended that the result of AvailableNamedTimeZoneIdentifiers remains the same for the lifetime of the surrounding agent. + + +

This definition supersedes the definition provided in .

+
+

Temporal.ZonedDateTime.prototype.toLocaleString ( [ _locales_ [ , _options_ ] ] )

This definition supersedes the definition provided in .

diff --git a/spec/timezone.html b/spec/timezone.html index 3479c5b3..e9ee964c 100644 --- a/spec/timezone.html +++ b/spec/timezone.html @@ -7,7 +7,7 @@

Amendments to the ECMAScript® 2024 Language Specification

This section lists amendments which must be made to ECMA-262, the ECMAScript® 2024 Language Specification. - The changes below are limited to the SystemTimeZoneIdentifier abstract operation, the %Temporal.TimeZone% built-in object, and the abstract operations related to that object. + The changes below are limited to the SystemTimeZoneIdentifier and AvailableNamedTimeZoneIdentifiers abstract operations, the %Temporal.TimeZone% built-in object, and the abstract operations related to that object. Text to be added is marked like this, and text to be deleted is marked like this.

@@ -27,6 +27,7 @@

SystemTimeZoneIdentifier ( ): a String

1. If the implementation only supports the UTC time zone, return *"UTC"*. 1. Let _systemTimeZoneString_ be the String representing the host environment's current time zone, either a named time zone identifier or a UTC offset string. + 1. Assert: _systemTimeZoneString_ is *"Etc/Unknown"* if the host environment's current time zone cannot be determined or is unrecognized by the ECMAScript implementation. 1. If IsTimeZoneOffsetString(_systemTimeZoneString_) is *true*, return _systemTimeZoneString_CanonicalizeTimeZoneOffsetString(_systemTimeZoneString_). 1. Assert: _systemTimeZoneString_ is the value of the [[PrimaryIdentifier]] field of at least one Time Zone Identifier Record returned by AvailableNamedTimeZoneIdentifiers(). 1. Return _systemTimeZoneString_. @@ -39,6 +40,73 @@

SystemTimeZoneIdentifier ( ): a String

For example, if the host environment is a browser on a system where the user has chosen US Eastern Time as their time zone, SystemTimeZoneIdentifier returns *"America/New_York"*.

+ + + +

Unknown Time Zone

+ +

+ ECMAScript implementations must make a best effort in SystemTimeZoneIdentifier to return the available named time zone identifier that is most closely associated with the host environment's time zone. + However, in some cases the host environment's time zone cannot be determined or is not recognized, for example if the host environment's time zone information is updated with a new identifier that the ECMAScript implementation does not yet include. + In those cases, the Unknown time zone is used. + This time zone behaves identically to the UTC time zone, except: +

+
    +
  • + Its identifier is *"Etc/Unknown"*, as defined in Unicode Technical Standard #35 Part 1 Core, Time Zone Identifiers. + *"Etc/Unknown"* must be a primary time zone identifier. + For time zone aware implementations, this is the only available named time zone identifier that is not required to exist in the IANA Time Zone Database. +
  • +
  • + An ECMAScript implementation that includes the ECMA-402 Internationalization API is recommended to provide a localized name for the Unknown time zone that is different from the localized name of all other available named time zones. +
  • +
+

+ These differences help programmers and/or end users recognize that a problem exists which may require action to fix, without causing ECMAScript programs to fail whenever SystemTimeZoneIdentifier is called. +

+

+ All implementations that support local political rules for any time zones, including implementations that will never return *"Etc/Unknown*" from SystemTimeZoneIdentifier because they share the host environment's list of available named time zone identifiers, must still accept *"Etc/Unknown"* as an available named time zone identifier, for example in the %Temporal.TimeZone% constructor. +

+ +

+

+
+
+
+
+ + +

AvailableNamedTimeZoneIdentifiers ( ): a List of Time Zone Identifier Records

+
+
description
+
+ Its result describes all available named time zone identifiers in this implementation, as well as the primary time zone identifier corresponding to each available identifier. + The List is sorted by [[Identifier]] of each Time Zone Identifier Record. +
+
+

+ Time zone aware implementations, including all implementations that implement the ECMA-402 Internationalization API, must implement the AvailableNamedTimeZoneIdentifiers abstract operation as specified in the ECMA-402 specification. + For implementations that are not time zone aware, the following specification is used. +

+ + 1. If the implementation does not include local political rules for any time zones, then + 1. Return « the Time Zone Identifier Record { [[Identifier]]: *"UTC"*, [[PrimaryIdentifier]]: *"UTC"* } ». + 1. Let _identifiers_ be the List of String values representing time zones supported by the implementation. + 1. Assert: No element of _identifiers_ is an ASCII-case-insensitive match for any other element. + 1. Assert: No element of _identifiers_ is an ASCII-case-insensitive match for *"Etc/Unknown"*. + 1. Append *"Etc/Unknown"* to _identifiers_. + 1. Set _identifiers_ to SortStringListByCodeUnit(_identifiers_). + 1. Let _result_ be a new empty List. + 1. For each element _identifier_ of _identifiers_, do + 1. Let _primary_ be _identifier_. + 1. If _identifier_ is a non-primary time zone identifier in this implementation and _identifier_ is not *"UTC"*neither *"UTC"* nor *"Etc/Unknown"*, then + 1. Set _primary_ to the primary time zone identifier that _identifier_ resolves to in this implementation. + 1. NOTE: An implementation may need to resolve _identifier_ iteratively to obtain the primary time zone identifier. + 1. Let _record_ be the Time Zone Identifier Record { [[Identifier]]: _identifier_, [[PrimaryIdentifier]]: _primary_ }. + 1. Append _record_ to the end of _result_. + 1. Assert: One element of _result_ is the Time Zone Identifier Record { [[Identifier]]: *"UTC"*, [[PrimaryIdentifier]]: *"UTC"* }. + 1. Return _result_. +