// |reftest| skip-if(!this.hasOwnProperty("Intl")||(xulRuntime.OS=="WINNT"&&!xulRuntime.shell)) -- Windows browser in automation doesn't pick up new time zones correctly // From bug 1330149: // // Windows only supports a very limited set of IANA time zone names for the TZ // environment variable. // // TZ format supported by Windows: "TZ=tzn[+|-]hh[:mm[:ss]][dzn]". // // Complete list of all IANA time zone ids matching that format. // // From tzdata's "northamerica" file: // EST5EDT // CST6CDT // MST7MDT // PST8PDT // // From tzdata's "backward" file: // GMT+0 // GMT-0 // GMT0 // // Also supported on Windows even though they don't match the format listed // above. // // From tzdata's "backward" file: // UCT // UTC // // From tzdata's "etcetera" file: // GMT function inTimeZone(tzname, fn) { setTimeZone(tzname); try { fn(); } finally { setTimeZone("PST8PDT"); } } const timeZones = [ { id: "EST5EDT" }, { id: "CST6CDT" }, { id: "MST7MDT" }, { id: "PST8PDT" }, // ICU on non-Windows platforms doesn't accept these three time zone // identifiers, cf. isValidOlsonID in $ICU/source/common/putil.cpp. We // could add support for them, but it seems unlikely they're used in // practice, so we just skip over them. // { id: "GMT+0", normalized: "UTC" }, // { id: "GMT-0", normalized: "UTC" }, // { id: "GMT0", normalized: "UTC" }, { id: "UCT", normalized: "UTC" }, { id: "UTC", normalized: "UTC" }, { id: "GMT", normalized: "UTC" }, ]; for (let {id, normalized = id} of timeZones) { inTimeZone(id, () => { let opts = new Intl.DateTimeFormat().resolvedOptions(); assertEq(opts.timeZone, normalized); }); } if (typeof reportCompare === "function") reportCompare(0, 0, "ok");