From 73926a53dd032f66446533c240aae10e05c0520e Mon Sep 17 00:00:00 2001
From: Justin Grant
+ Time zones in ECMAScript are represented by time zone identifiers, which are Strings composed entirely of code units in the inclusive interval from 0x0000 to 0x007F.
+ Time zones supported by an ECMAScript implementation may be available named time zones, represented by the [[Identifier]] field of the Time Zone Identifier Records returned by AvailableNamedTimeZoneIdentifiers, or offset time zones, represented by Strings for which IsTimeZoneOffsetString returns *true*.
+
+ A primary time zone identifier is the preferred identifier for an available named time zone.
+ A non-primary time zone identifier is an identifier for an available named time zone that is not a primary time zone identifier.
+ An available named time zone identifier is either a primary time zone identifier or a non-primary time zone identifier.
+ Each available named time zone identifier is associated with exactly one available named time zone.
+ Each available named time zone is associated with exactly one primary time zone identifier and zero or more non-primary time zone identifiers.
+
+ ECMAScript implementations must support an available named time zone with the identifier *"UTC"*, which must be the primary time zone identifier for the UTC time zone.
+ In addition, implementations may support any number of other available named time zones.
+
+ Implementations that follow the requirements for time zones as described in the ECMA-402 Internationalization API specification are called time zone aware.
+ Time zone aware implementations must support available named time zones corresponding to the Zone and Link names of the IANA Time Zone Database, and only such names.
+ In time zone aware implementations, a primary time zone identifier is a Zone name, and a non-primary time zone identifier is a Link name, respectively, in the IANA Time Zone Database except as specifically overridden by AvailableNamedTimeZoneIdentifiers as specified in the ECMA-402 specification.
+ Implementations that do not support the entire IANA Time Zone Database are still recommended to use IANA Time Zone Database names as identifiers to represent time zones.
+ It is recommended that implementations use the time zone information of the IANA Time Zone Database https://www.iana.org/time-zones/. It is required for time zone aware implementations (and recommended for all others) to use the time zone information of the IANA Time Zone Database https://www.iana.org/time-zones/. 1:30 AM on 5 November 2017 in America/New_York is repeated twice, so GetNamedTimeZoneEpochNanoseconds(*"America/New_York"*, 2017, 11, 5, 1, 30, 0, 0, 0, 0) would return a List of length 2 in which the first element represents 05:30 UTC (corresponding with 01:30 US Eastern Daylight Time at UTC offset -04:00) and the second element represents 06:30 UTC (corresponding with 01:30 US Eastern Standard Time at UTC offset -05:00). 2:30 AM on 12 March 2017 in America/New_York does not exist, so GetNamedTimeZoneEpochNanoseconds(*"America/New_York"*, 2017, 3, 12, 2, 30, 0, 0, 0, 0) would return an empty List. A Time Zone Identifier Record is a Record used to describe an available named time zone identifier and its corresponding primary time zone identifier. Time Zone Identifier Records have the fields listed in If [[Identifier]] is a primary time zone identifier, then [[Identifier]] is [[PrimaryIdentifier]].
+ 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, AvailableNamedTimeZoneIdentifiers performs the following steps when called:
+ An ECMAScript implementation that includes the ECMA-402 Internationalization API must implement the DefaultTimeZone abstract operation as specified in the ECMA-402 specification. The default implementation of DefaultTimeZone, to be used for ECMAScript implementations that do not include local political rules for any time zones, performs the following steps when called:
- To ensure the level of functionality that implementations commonly provide in the methods of the Date object, it is recommended that DefaultTimeZone return an IANA time zone name corresponding to the host environment's time zone setting, if such a thing exists.
+ To ensure the level of functionality that implementations commonly provide in the methods of the Date object, it is recommended that SystemTimeZoneIdentifier return an IANA time zone name corresponding to the host environment's time zone setting, if such a thing exists.
GetNamedTimeZoneEpochNanoseconds and GetNamedTimeZoneOffsetNanoseconds must reflect the local political rules for standard time and daylight saving time in that time zone, if such rules exist.
For example, if the host environment is a browser on a system where the user has chosen US Eastern Time as their time zone, DefaultTimeZone returns *"America/New_York"*. 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"*. If political rules for the local time _t_ are not available within the implementation, the result is _t_ because DefaultTimeZone returns *"UTC"* and GetNamedTimeZoneOffsetNanoseconds returns 0. It is recommended that implementations use the time zone information of the IANA Time Zone Database https://www.iana.org/time-zones/. If political rules for the local time _t_ are not available within the implementation, the result is _t_ because SystemTimeZoneIdentifier returns *"UTC"* and GetNamedTimeZoneOffsetNanoseconds returns 0. It is required for time zone aware implementations (and recommended for all others) to use the time zone information of the IANA Time Zone Database https://www.iana.org/time-zones/. Two different input time values
+
Time Zone Identifiers
+
+
GetNamedTimeZoneEpochNanoseconds (
@@ -32191,7 +32217,7 @@
1. Return « _epochNanoseconds_ ».
DefaultTimeZone ( ): a String
+ Time Zone Identifier Record
+
+
+
+
+ Field Name
+ Value
+ Meaning
+
+
+ [[Identifier]]
+ a String
+ An available named time zone identifier that is supported by the implementation.
+
+
+ [[PrimaryIdentifier]]
+ a String
+ The primary time zone identifier that [[Identifier]] resolves to.
+ AvailableNamedTimeZoneIdentifiers ( ): a List of Time Zone Identifier Records
+ SystemTimeZoneIdentifier ( ): a String
+
+
For example, the maximum time value is 8.64 × 1015, corresponding with *"+275760-09-13T00:00:00Z"*.
In an environment where the local time zone offset is ahead of UTC by 1 hour at that instant, it is represented by the larger input of 8.64 × 1015 + 3.6 × 106, corresponding with *"+275760-09-13T01:00:00+01:00"*.
If political rules for the local time _t_ are not available within the implementation, the result is _t_ because DefaultTimeZone returns *"UTC"* and GetNamedTimeZoneOffsetNanoseconds returns 0.
+If political rules for the local time _t_ are not available within the implementation, the result is _t_ because SystemTimeZoneIdentifier returns *"UTC"* and GetNamedTimeZoneOffsetNanoseconds returns 0.
It is recommended that implementations use the time zone information of the IANA Time Zone Database https://www.iana.org/time-zones/.
+It is required for time zone aware implementations (and recommended for all others) to use the time zone information of the IANA Time Zone Database https://www.iana.org/time-zones/.
1:30 AM on 5 November 2017 in America/New_York is repeated twice (fall backward), but it must be interpreted as 1:30 AM UTC-04 instead of 1:30 AM UTC-05.
In UTC(TimeClip(MakeDate(MakeDay(2017, 10, 5), MakeTime(1, 30, 0, 0)))), the value of _offsetMs_ is