From 854292986d9177e41799b1dc610c9eb78956d04e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mark=20C=C3=B4t=C3=A9?= Date: Mon, 28 May 2012 21:10:45 +0300 Subject: [PATCH 1/2] Moved time-series functionality into a separate plug-in and incorporated time zones. --- API.txt | 46 +- examples/date.js | 838 +++++++++++++++++++++++++++ examples/index.html | 2 +- examples/multiple-axes.html | 1 + examples/time.html | 1 + examples/timezones.html | 74 +++ examples/tz/africa | 314 +++++++++++ examples/tz/antarctica | 108 ++++ examples/tz/asia | 731 ++++++++++++++++++++++++ examples/tz/australasia | 304 ++++++++++ examples/tz/backward | 110 ++++ examples/tz/etcetera | 36 ++ examples/tz/europe | 1058 +++++++++++++++++++++++++++++++++++ examples/tz/factory | 1 + examples/tz/iso3166.tab | 271 +++++++++ examples/tz/leapseconds | 87 +++ examples/tz/northamerica | 965 ++++++++++++++++++++++++++++++++ examples/tz/pacificnew | 29 + examples/tz/solar87 | 391 +++++++++++++ examples/tz/solar88 | 391 +++++++++++++ examples/tz/solar89 | 396 +++++++++++++ examples/tz/southamerica | 506 +++++++++++++++++ examples/tz/systemv | 39 ++ examples/tz/yearistype.sh | 40 ++ examples/tz/zone.tab | 437 +++++++++++++++ examples/visitors.html | 1 + jquery.flot.js | 251 +-------- jquery.flot.time.js | 286 ++++++++++ 28 files changed, 7467 insertions(+), 247 deletions(-) create mode 100644 examples/date.js create mode 100644 examples/timezones.html create mode 100644 examples/tz/africa create mode 100644 examples/tz/antarctica create mode 100644 examples/tz/asia create mode 100644 examples/tz/australasia create mode 100644 examples/tz/backward create mode 100644 examples/tz/etcetera create mode 100644 examples/tz/europe create mode 100644 examples/tz/factory create mode 100644 examples/tz/iso3166.tab create mode 100644 examples/tz/leapseconds create mode 100644 examples/tz/northamerica create mode 100644 examples/tz/pacificnew create mode 100644 examples/tz/solar87 create mode 100644 examples/tz/solar88 create mode 100644 examples/tz/solar89 create mode 100644 examples/tz/southamerica create mode 100644 examples/tz/systemv create mode 100644 examples/tz/yearistype.sh create mode 100644 examples/tz/zone.tab create mode 100644 jquery.flot.time.js diff --git a/API.txt b/API.txt index 88e3936..65400c6 100644 --- a/API.txt +++ b/API.txt @@ -174,7 +174,8 @@ Customizing the axes xaxis, yaxis: { show: null or true/false position: "bottom" or "top" or "left" or "right" - mode: null or "time" + mode: null or "time" ("time" requires jquery.flot.time.js plugin) + timezone: null, "browser" or timezone (only makes sense for mode: "time") color: null or color spec tickColor: null or color spec @@ -214,8 +215,9 @@ false. The "position" option specifies where the axis is placed, bottom or top for x axes, left or right for y axes. The "mode" option determines how the data is interpreted, the default of null means as decimal -numbers. Use "time" for time series data, see the time series data -section. +numbers. Use "time" for time series data; see the time series data +section. The time plugin (jquery.flot.time.js) is required for time +series support. The "color" option determines the color of the labels and ticks for the axis (default is the grid color). For more fine-grained control @@ -410,10 +412,13 @@ either accept an xaxis/yaxis parameter to specify which axis number to use (starting from 1), or lets you specify the coordinate directly as x2/x3/... or x2axis/x3axis/... instead of "x" or "xaxis". - + Time series data ================ +Please note that it is now required to include the time plugin, +jquery.flot.time.js, for time series support. + Time series are a bit more difficult than scalar data because calendars don't follow a simple base 10 system. For many cases, Flot abstracts most of this away, but it can still be a bit difficult to @@ -430,16 +435,19 @@ You can see a timestamp like this alert((new Date()).getTime()) -Normally you want the timestamps to be displayed according to a -certain time zone, usually the time zone in which the data has been -produced. However, Flot always displays timestamps according to UTC. -It has to as the only alternative with core Javascript is to interpret -the timestamps according to the time zone that the visitor is in, -which means that the ticks will shift unpredictably with the time zone -and daylight savings of each visitor. +There are different schools of thought when it comes to diplay of +timestamps. Many will want the timestamps to be displayed according to +a certain time zone, usually the time zone in which the data has been +produced. Some want the localized experience, where the timestamps are +displayed according to the local time of the visitor. Flot supports +both. Optionally you can include a third-party library to get +additional timezone support. -So given that there's no good support for custom time zones in -Javascript, you'll have to take care of this server-side. +Default behavior is that Flot always displays timestamps according to +UTC. The reason being that the core Javascript Date object does not +support other fixed time zones. Often your data is at another time +zone, so it may take a little bit of tweaking to work around this +limitation. The easiest way to think about it is to pretend that the data production time zone is UTC, even if it isn't. So if you have a @@ -469,6 +477,18 @@ programming environments have some means of getting the timezone offset for a specific date (note that you need to get the offset for each individual timestamp to account for daylight savings). +The alternative with core Javascript is to interpret the timestamps +according to the time zone that the visitor is in, which means that +the ticks will shift with the time zone and daylight savings of each +visitor. This behavior is enabled by setting the axis option +"timezone" to the value "browser". + +If you need more zime zone functionality than this, there is still +another option. If you include the "timezone-js" library + in the page and set axis.timezone +to a value recognized by said library, Flot will use timezone-js to +interpret the timestamps according to that time zone. + Once you've gotten the timestamps into the data and specified "time" as the axis mode, Flot will automatically generate relevant ticks and format them. As always, you can tweak the ticks via the "ticks" option diff --git a/examples/date.js b/examples/date.js new file mode 100644 index 0000000..bb8a689 --- /dev/null +++ b/examples/date.js @@ -0,0 +1,838 @@ +/* + * Part of "timezone-js" + * + * Copyright 2010 Matthew Eernisse (mde@fleegix.org) + * and Open Source Applications Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Credits: Ideas included from incomplete JS implementation of Olson + * parser, "XMLDAte" by Philippe Goetz (philippe.goetz@wanadoo.fr) + * + * Contributions: + * Jan Niehusmann + * Ricky Romero + * Preston Hunt (prestonhunt@gmail.com), + * Dov. B Katz (dov.katz@morganstanley.com), + * Peter Bergström (pbergstr@mac.com) +*/ +if (typeof fleegix == 'undefined') { var fleegix = {}; } +if (typeof timezoneJS == 'undefined') { timezoneJS = {}; } + +timezoneJS.Date = function () { + var args = Array.prototype.slice.apply(arguments); + var t = null; + var dt = null; + var tz = null; + var utc = false; + + // No args -- create a floating date based on the current local offset + if (args.length === 0) { + dt = new Date(); + } + // Date string or timestamp -- assumes floating + else if (args.length == 1) { + dt = new Date(args[0]); + } + // year, month, [date,] [hours,] [minutes,] [seconds,] [milliseconds,] [tzId,] [utc] + else { + t = args[args.length-1]; + // Last arg is utc + if (typeof t == 'boolean') { + utc = args.pop(); + tz = args.pop(); + } + // Last arg is tzId + else if (typeof t == 'string') { + tz = args.pop(); + if (tz == 'Etc/UTC' || tz == 'Etc/GMT') { + utc = true; + } + } + + // Date string (e.g., '12/27/2006') + t = args[args.length-1]; + if (typeof t == 'string') { + dt = new Date(args[0]); + } + // Date part numbers + else { + var a = []; + for (var i = 0; i < 8; i++) { + a[i] = args[i] || 0; + } + dt = new Date(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]); + } + } + this._useCache = false; + this._tzInfo = {}; + this._tzAbbr = ''; + this._day = 0; + this.year = 0; + this.month = 0; + this.date = 0; + this.hours= 0; + this.minutes = 0; + this.seconds = 0; + this.milliseconds = 0; + this.timezone = tz || null; + this.utc = utc || false; + this.setFromDateObjProxy(dt); +}; + +timezoneJS.Date.prototype = { + getDate: function () { return this.date; }, + getDay: function () { return this._day; }, + getFullYear: function () { return this.year; }, + getMonth: function () { return this.month; }, + getYear: function () { return this.year; }, + getHours: function () { + return this.hours; + }, + getMilliseconds: function () { + return this.milliseconds; + }, + getMinutes: function () { + return this.minutes; + }, + getSeconds: function () { + return this.seconds; + }, + getTime: function () { + var dt = Date.UTC(this.year, this.month, this.date, + this.hours, this.minutes, this.seconds, this.milliseconds); + return dt + (this.getTimezoneOffset()*60*1000); + }, + getTimezone: function () { + return this.timezone; + }, + getTimezoneOffset: function () { + var info = this.getTimezoneInfo(); + return info.tzOffset; + }, + getTimezoneAbbreviation: function () { + var info = this.getTimezoneInfo(); + return info.tzAbbr; + }, + getTimezoneInfo: function () { + var res; + if (this.utc) { + res = { tzOffset: 0, + tzAbbr: 'UTC' }; + } + else { + if (this._useCache) { + res = this._tzInfo; + } + else { + if (this.timezone) { + var dt = new Date(Date.UTC(this.year, this.month, this.date, + this.hours, this.minutes, this.seconds, this.milliseconds)); + var tz = this.timezone; + res = timezoneJS.timezone.getTzInfo(dt, tz); + } + // Floating -- use local offset + else { + res = { tzOffset: this.getLocalOffset(), + tzAbbr: null }; + } + this._tzInfo = res; + this._useCache = true; + } + } + return res; + }, + getUTCDate: function () { + return this.getUTCDateProxy().getUTCDate(); + }, + getUTCDay: function () { + return this.getUTCDateProxy().getUTCDay(); + }, + getUTCFullYear: function () { + return this.getUTCDateProxy().getUTCFullYear(); + }, + getUTCHours: function () { + return this.getUTCDateProxy().getUTCHours(); + }, + getUTCMilliseconds: function () { + return this.getUTCDateProxy().getUTCMilliseconds(); + }, + getUTCMinutes: function () { + return this.getUTCDateProxy().getUTCMinutes(); + }, + getUTCMonth: function () { + return this.getUTCDateProxy().getUTCMonth(); + }, + getUTCSeconds: function () { + return this.getUTCDateProxy().getUTCSeconds(); + }, + setDate: function (n) { + this.setAttribute('date', n); + }, + setFullYear: function (n) { + this.setAttribute('year', n); + }, + setMonth: function (n) { + this.setAttribute('month', n); + }, + setYear: function (n) { + this.setUTCAttribute('year', n); + }, + setHours: function (n) { + this.setAttribute('hours', n); + }, + setMilliseconds: function (n) { + this.setAttribute('milliseconds', n); + }, + setMinutes: function (n) { + this.setAttribute('minutes', n); + }, + setSeconds: function (n) { + this.setAttribute('seconds', n); + }, + setTime: function (n) { + if (isNaN(n)) { throw new Error('Units must be a number.'); } + var dt = new Date(0); + dt.setUTCMilliseconds(n - (this.getTimezoneOffset()*60*1000)); + this.setFromDateObjProxy(dt, true); + }, + setUTCDate: function (n) { + this.setUTCAttribute('date', n); + }, + setUTCFullYear: function (n) { + this.setUTCAttribute('year', n); + }, + setUTCHours: function (n) { + this.setUTCAttribute('hours', n); + }, + setUTCMilliseconds: function (n) { + this.setUTCAttribute('milliseconds', n); + }, + setUTCMinutes: function (n) { + this.setUTCAttribute('minutes', n); + }, + setUTCMonth: function (n) { + this.setUTCAttribute('month', n); + }, + setUTCSeconds: function (n) { + this.setUTCAttribute('seconds', n); + }, + toGMTString: function () {}, + toLocaleString: function () {}, + toLocaleDateString: function () {}, + toLocaleTimeString: function () {}, + toSource: function () {}, + toString: function () { + // Get a quick looky at what's in there + var str = this.getFullYear() + '-' + (this.getMonth()+1) + '-' + this.getDate(); + var hou = this.getHours() || 12; + hou = String(hou); + var min = String(this.getMinutes()); + if (min.length == 1) { min = '0' + min; } + var sec = String(this.getSeconds()); + if (sec.length == 1) { sec = '0' + sec; } + str += ' ' + hou; + str += ':' + min; + str += ':' + sec; + return str; + }, + toUTCString: function () {}, + valueOf: function () { + return this.getTime(); + }, + clone: function () { + return new timezoneJS.Date(this.year, this.month, this.date, + this.hours, this.minutes, this.seconds, this.milliseconds, + this.timezone); + }, + setFromDateObjProxy: function (dt, fromUTC) { + this.year = fromUTC ? dt.getUTCFullYear() : dt.getFullYear(); + this.month = fromUTC ? dt.getUTCMonth() : dt.getMonth(); + this.date = fromUTC ? dt.getUTCDate() : dt.getDate(); + this.hours = fromUTC ? dt.getUTCHours() : dt.getHours(); + this.minutes = fromUTC ? dt.getUTCMinutes() : dt.getMinutes(); + this.seconds = fromUTC ? dt.getUTCSeconds() : dt.getSeconds(); + this.milliseconds = fromUTC ? dt.getUTCMilliseconds() : dt.getMilliseconds(); + this._day = fromUTC ? dt.getUTCDay() : dt.getDay(); + this._useCache = false; + }, + getUTCDateProxy: function () { + var dt = new Date(Date.UTC(this.year, this.month, this.date, + this.hours, this.minutes, this.seconds, this.milliseconds)); + dt.setUTCMinutes(dt.getUTCMinutes() + this.getTimezoneOffset()); + return dt; + }, + setAttribute: function (unit, n) { + if (isNaN(n)) { throw new Error('Units must be a number.'); } + var dt = new Date(this.year, this.month, this.date, + this.hours, this.minutes, this.seconds, this.milliseconds); + var meth = unit == 'year' ? 'FullYear' : unit.substr(0, 1).toUpperCase() + + unit.substr(1); + dt['set' + meth](n); + this.setFromDateObjProxy(dt); + }, + setUTCAttribute: function (unit, n) { + if (isNaN(n)) { throw new Error('Units must be a number.'); } + var meth = unit == 'year' ? 'FullYear' : unit.substr(0, 1).toUpperCase() + + unit.substr(1); + var dt = this.getUTCDateProxy(); + dt['setUTC' + meth](n); + dt.setUTCMinutes(dt.getUTCMinutes() - this.getTimezoneOffset()); + this.setFromDateObjProxy(dt, true); + }, + setTimezone: function (tz) { + if (tz == 'Etc/UTC' || tz == 'Etc/GMT') { + this.utc = true; + } + this.timezone = tz; + this._useCache = false; + }, + removeTimezone: function () { + this.utc = false; + this.timezone = null; + this._useCache = false; + }, + civilToJulianDayNumber: function (y, m, d) { + var a; + // Adjust for zero-based JS-style array + m++; + if (m > 12) { + a = parseInt(m/12, 10); + m = m % 12; + y += a; + } + if (m <= 2) { + y -= 1; + m += 12; + } + a = Math.floor(y / 100); + var b = 2 - a + Math.floor(a / 4); + jDt = Math.floor(365.25 * (y + 4716)) + + Math.floor(30.6001 * (m + 1)) + + d + b - 1524; + return jDt; + }, + getLocalOffset: function () { + var dt = this; + var d = new Date(dt.getYear(), dt.getMonth(), dt.getDate(), + dt.getHours(), dt.getMinutes(), dt.getSeconds()); + return d.getTimezoneOffset(); + } +}; + + +timezoneJS.timezone = new function() { + var _this = this; + var monthMap = { 'jan': 0, 'feb': 1, 'mar': 2, 'apr': 3,'may': 4, 'jun': 5, + 'jul': 6, 'aug': 7, 'sep': 8, 'oct': 9, 'nov': 10, 'dec': 11 }; + var dayMap = {'sun': 0,'mon' :1, 'tue': 2, 'wed': 3, 'thu': 4, 'fri': 5, 'sat': 6 }; + var regionMap = {'EST':'northamerica','MST':'northamerica','HST':'northamerica','EST5EDT':'northamerica','CST6CDT':'northamerica','MST7MDT':'northamerica','PST8PDT':'northamerica','America':'northamerica','Pacific':'australasia','Atlantic':'europe','Africa':'africa','Indian':'africa','Antarctica':'antarctica','Asia':'asia','Australia':'australasia','Europe':'europe','WET':'europe','CET':'europe','MET':'europe','EET':'europe'}; + var regionExceptions = {'Pacific/Honolulu':'northamerica','Atlantic/Bermuda':'northamerica','Atlantic/Cape_Verde':'africa','Atlantic/St_Helena':'africa','Indian/Kerguelen':'antarctica','Indian/Chagos':'asia','Indian/Maldives':'asia','Indian/Christmas':'australasia','Indian/Cocos':'australasia','America/Danmarkshavn':'europe','America/Scoresbysund':'europe','America/Godthab':'europe','America/Thule':'europe','Asia/Yekaterinburg':'europe','Asia/Omsk':'europe','Asia/Novosibirsk':'europe','Asia/Krasnoyarsk':'europe','Asia/Irkutsk':'europe','Asia/Yakutsk':'europe','Asia/Vladivostok':'europe','Asia/Sakhalin':'europe','Asia/Magadan':'europe','Asia/Kamchatka':'europe','Asia/Anadyr':'europe','Africa/Ceuta':'europe','America/Argentina/Buenos_Aires':'southamerica','America/Argentina/Cordoba':'southamerica','America/Argentina/Tucuman':'southamerica','America/Argentina/La_Rioja':'southamerica','America/Argentina/San_Juan':'southamerica','America/Argentina/Jujuy':'southamerica','America/Argentina/Catamarca':'southamerica','America/Argentina/Mendoza':'southamerica','America/Argentina/Rio_Gallegos':'southamerica','America/Argentina/Ushuaia':'southamerica','America/Aruba':'southamerica','America/La_Paz':'southamerica','America/Noronha':'southamerica','America/Belem':'southamerica','America/Fortaleza':'southamerica','America/Recife':'southamerica','America/Araguaina':'southamerica','America/Maceio':'southamerica','America/Bahia':'southamerica','America/Sao_Paulo':'southamerica','America/Campo_Grande':'southamerica','America/Cuiaba':'southamerica','America/Porto_Velho':'southamerica','America/Boa_Vista':'southamerica','America/Manaus':'southamerica','America/Eirunepe':'southamerica','America/Rio_Branco':'southamerica','America/Santiago':'southamerica','Pacific/Easter':'southamerica','America/Bogota':'southamerica','America/Curacao':'southamerica','America/Guayaquil':'southamerica','Pacific/Galapagos':'southamerica','Atlantic/Stanley':'southamerica','America/Cayenne':'southamerica','America/Guyana':'southamerica','America/Asuncion':'southamerica','America/Lima':'southamerica','Atlantic/South_Georgia':'southamerica','America/Paramaribo':'southamerica','America/Port_of_Spain':'southamerica','America/Montevideo':'southamerica','America/Caracas':'southamerica'}; + + function invalidTZError(t) { + throw new Error('Timezone "' + t + '" is either incorrect, or not loaded in the timezone registry.'); + } + + function builtInLoadZoneFile(fileName, opts) { + var ajaxRequest = { + url: _this.zoneFileBasePath + '/' + fileName, + async: !!opts.async, + dataType: "text", + done: false, + success: function (str) { + if (_this.parseZones(str)) { + if (typeof opts.callback == 'function') { + opts.callback(); + } + } + this.done = true; + }, + error: function () { + throw new Error('Error retrieving "' + url + '" zoneinfo file.'); + } + }; + var res = $.ajax(ajaxRequest); + return ajaxRequest.done; + } + function getRegionForTimezone(tz) { + var exc = regionExceptions[tz]; + var ret; + if (exc) { + return exc; + } + else { + reg = tz.split('/')[0]; + ret = regionMap[reg]; + // If there's nothing listed in the main regions for + // this TZ, check the 'backward' links + if (!ret) { + var link = _this.zones[tz]; + if (typeof link == 'string') { + return getRegionForTimezone(link); + } + else { + // Backward-compat file hasn't loaded yet, try looking in there + if (!_this.loadedZones.backward) { + // This is for obvious legacy zones (e.g., Iceland) that + // don't even have a prefix like "America/" that look like + // normal zones + var parsed = _this.loadZoneFile('backward', true); + return getRegionForTimezone(tz); + } + else { + invalidTZError(tz); + } + } + } + return ret; + } + } + function parseTimeString(str) { + var pat = /(\d+)(?::0*(\d*))?(?::0*(\d*))?([wsugz])?$/; + var hms = str.match(pat); + hms[1] = parseInt(hms[1], 10); + hms[2] = hms[2] ? parseInt(hms[2], 10) : 0; + hms[3] = hms[3] ? parseInt(hms[3], 10) : 0; + return hms; + } + function getZone(dt, tz) { + var t = tz; + var zoneList = _this.zones[t]; + // Follow links to get to an acutal zone + while (typeof zoneList == "string") { + t = zoneList; + zoneList = _this.zones[t]; + } + if (!zoneList) { + // Backward-compat file hasn't loaded yet, try looking in there + if (!_this.loadedZones.backward) { + // This is for backward entries like "America/Fort_Wayne" that + // getRegionForTimezone *thinks* it has a region file and zone + // for (e.g., America => 'northamerica'), but in reality it's a + // legacy zone we need the backward file for + var parsed = _this.loadZoneFile('backward', true); + return getZone(dt, tz); + } + invalidTZError(t); + } + for(var i = 0; i < zoneList.length; i++) { + var z = zoneList[i]; + if (!z[3]) { break; } + var yea = parseInt(z[3], 10); + var mon = 11; + var dat = 31; + if (z[4]) { + mon = monthMap[z[4].substr(0, 3).toLowerCase()]; + dat = parseInt(z[5], 10); + } + var t = z[6] ? z[6] : '23:59:59'; + t = parseTimeString(t); + var d = Date.UTC(yea, mon, dat, t[1], t[2], t[3]); + if (dt.getTime() < d) { break; } + } + if (i == zoneList.length) { throw new Error('No Zone found for "' + timezone + '" on ' + dt); } + return zoneList[i]; + + } + function getBasicOffset(z) { + var off = parseTimeString(z[0]); + var adj = z[0].indexOf('-') == 0 ? -1 : 1 + off = adj * (((off[1] * 60 + off[2]) *60 + off[3]) * 1000); + return -off/60/1000; + } + + // if isUTC is true, date is given in UTC, otherwise it's given + // in local time (ie. date.getUTC*() returns local time components) + function getRule( date, zone, isUTC ) { + var ruleset = zone[1]; + var basicOffset = getBasicOffset( zone ); + + // Convert a date to UTC. Depending on the 'type' parameter, the date + // parameter may be: + // 'u', 'g', 'z': already UTC (no adjustment) + // 's': standard time (adjust for time zone offset but not for DST) + // 'w': wall clock time (adjust for both time zone and DST offset) + // + // DST adjustment is done using the rule given as third argument + var convertDateToUTC = function( date, type, rule ) { + var offset = 0; + + if(type == 'u' || type == 'g' || type == 'z') { // UTC + offset = 0; + } else if(type == 's') { // Standard Time + offset = basicOffset; + } else if(type == 'w' || !type ) { // Wall Clock Time + offset = getAdjustedOffset(basicOffset,rule); + } else { + throw("unknown type "+type); + } + offset *= 60*1000; // to millis + + return new Date( date.getTime() + offset ); + } + + // Step 1: Find applicable rules for this year. + // Step 2: Sort the rules by effective date. + // Step 3: Check requested date to see if a rule has yet taken effect this year. If not, + // Step 4: Get the rules for the previous year. If there isn't an applicable rule for last year, then + // there probably is no current time offset since they seem to explicitly turn off the offset + // when someone stops observing DST. + // FIXME if this is not the case and we'll walk all the way back (ugh). + // Step 5: Sort the rules by effective date. + // Step 6: Apply the most recent rule before the current time. + + var convertRuleToExactDateAndTime = function( yearAndRule, prevRule ) + { + var year = yearAndRule[0]; + var rule = yearAndRule[1]; + + // Assume that the rule applies to the year of the given date. + var months = { + "Jan": 0, "Feb": 1, "Mar": 2, "Apr": 3, "May": 4, "Jun": 5, + "Jul": 6, "Aug": 7, "Sep": 8, "Oct": 9, "Nov": 10, "Dec": 11 + }; + + var days = { + "sun": 0, "mon": 1, "tue": 2, "wed": 3, "thu": 4, "fri": 5, "sat": 6 + } + + var hms = parseTimeString( rule[ 5 ] ); + var effectiveDate; + + if ( !isNaN( rule[ 4 ] ) ) // If we have a specific date, use that! + { + effectiveDate = new Date( Date.UTC( year, months[ rule[ 3 ] ], rule[ 4 ], hms[ 1 ], hms[ 2 ], hms[ 3 ], 0 ) ); + } + else // Let's hunt for the date. + { + var targetDay, + operator; + + if ( rule[ 4 ].substr( 0, 4 ) === "last" ) // Example: lastThu + { + // Start at the last day of the month and work backward. + effectiveDate = new Date( Date.UTC( year, months[ rule[ 3 ] ] + 1, 1, hms[ 1 ] - 24, hms[ 2 ], hms[ 3 ], 0 ) ); + targetDay = days[ rule[ 4 ].substr( 4, 3 ).toLowerCase( ) ]; + operator = "<="; + } + else // Example: Sun>=15 + { + // Start at the specified date. + effectiveDate = new Date( Date.UTC( year, months[ rule[ 3 ] ], rule[ 4 ].substr( 5 ), hms[ 1 ], hms[ 2 ], hms[ 3 ], 0 ) ); + targetDay = days[ rule[ 4 ].substr( 0, 3 ).toLowerCase( ) ]; + operator = rule[ 4 ].substr( 3, 2 ); + } + + var ourDay = effectiveDate.getUTCDay( ); + + if ( operator === ">=" ) // Go forwards. + { + effectiveDate.setUTCDate( effectiveDate.getUTCDate( ) + ( targetDay - ourDay + ( ( targetDay < ourDay ) ? 7 : 0 ) ) ); + } + else // Go backwards. Looking for the last of a certain day, or operator is "<=" (less likely). + { + effectiveDate.setUTCDate( effectiveDate.getUTCDate( ) + ( targetDay - ourDay - ( ( targetDay > ourDay ) ? 7 : 0 ) ) ); + } + } + + // if previous rule is given, correct for the fact that the starting time of the current + // rule may be specified in local time + if(prevRule) { + effectiveDate = convertDateToUTC(effectiveDate, hms[4], prevRule); + } + + return effectiveDate; + } + + var indexOf = function(array, what, startAt) { + if(array.indexOf) { + return array.indexOf(what,startAt); + } + for (var i = (startAt || 0); i < array.length; i++) { + if (array[i] == what) { + return i; + } + } + return -1; + }; + + var findApplicableRules = function( year, ruleset ) + { + var applicableRules = []; + + for ( var i in ruleset ) + { + if ( Number( ruleset[ i ][ 0 ] ) <= year ) // Exclude future rules. + { + if ( + Number( ruleset[ i ][ 1 ] ) >= year // Date is in a set range. + || ( Number( ruleset[ i ][ 0 ] ) === year && ruleset[ i ][ 1 ] === "only" ) // Date is in an "only" year. + || ruleset[ i ][ 1 ] === "max" // We're in a range from the start year to infinity. + ) + { + // It's completely okay to have any number of matches here. + // Normally we should only see two, but that doesn't preclude other numbers of matches. + // These matches are applicable to this year. + applicableRules.push( [year, ruleset[ i ]] ); + } + } + } + + return applicableRules; + } + + var compareDates = function( a, b, prev ) + { + if ( a.constructor !== Date ) { + a = convertRuleToExactDateAndTime( a, prev ); + } else if(prev) { + a = convertDateToUTC(a, isUTC?'u':'w', prev); + } + if ( b.constructor !== Date ) { + b = convertRuleToExactDateAndTime( b, prev ); + } else if(prev) { + b = convertDateToUTC(b, isUTC?'u':'w', prev); + } + + a = Number( a ); + b = Number( b ); + + return a - b; + } + + var year = date.getUTCFullYear( ); + var applicableRules; + + applicableRules = findApplicableRules( year, _this.rules[ ruleset ] ); + applicableRules.push( date ); + // While sorting, the time zone in which the rule starting time is specified + // is ignored. This is ok as long as the timespan between two DST changes is + // larger than the DST offset, which is probably always true. + // As the given date may indeed be close to a DST change, it may get sorted + // to a wrong position (off by one), which is corrected below. + applicableRules.sort( compareDates ); + + if ( indexOf(applicableRules, date ) < 2 ) { // If there are not enough past DST rules... + applicableRules = applicableRules.concat(findApplicableRules( year-1, _this.rules[ ruleset ] )); + applicableRules.sort( compareDates ); + } + + var pinpoint = indexOf(applicableRules, date); + if ( pinpoint > 1 && compareDates( date, applicableRules[pinpoint-1], applicableRules[pinpoint-2][1] ) < 0 ) { + // the previous rule does not really apply, take the one before that + return applicableRules[ pinpoint - 2 ][1]; + } else if ( pinpoint > 0 && pinpoint < applicableRules.length - 1 && compareDates( date, applicableRules[pinpoint+1], applicableRules[pinpoint-1][1] ) > 0) { + // the next rule does already apply, take that one + return applicableRules[ pinpoint + 1 ][1]; + } else if ( pinpoint === 0 ) { + // no applicable rule found in this and in previous year + return null; + } else { + return applicableRules[ pinpoint - 1 ][1]; + } + } + function getAdjustedOffset(off, rule) { + var save = rule[6]; + var t = parseTimeString(save); + var adj = save.indexOf('-') == 0 ? -1 : 1; + var ret = (adj*(((t[1] *60 + t[2]) * 60 + t[3]) * 1000)); + ret = ret/60/1000; + ret -= off + ret = -Math.ceil(ret); + return ret; + } + function getAbbreviation(zone, rule) { + var res; + var base = zone[2]; + if (base.indexOf('%s') > -1) { + var repl; + if (rule) { + repl = rule[7]=='-'?'':rule[7]; + } + // FIXME: Right now just falling back to Standard -- + // apparently ought to use the last valid rule, + // although in practice that always ought to be Standard + else { + repl = 'S'; + } + res = base.replace('%s', repl); + } + else if (base.indexOf('/') > -1) { + // chose one of two alternative strings + var t = parseTimeString(rule[6]); + var isDst = (t[1])||(t[2])||(t[3]); + res = base.split("/",2)[isDst?1:0]; + } else { + res = base; + } + return res; + } + + this.zoneFileBasePath; + this.zoneFiles = ['africa', 'antarctica', 'asia', + 'australasia', 'backward', 'etcetera', 'europe', + 'northamerica', 'pacificnew', 'southamerica']; + this.loadingSchemes = { + PRELOAD_ALL: 'preloadAll', + LAZY_LOAD: 'lazyLoad', + MANUAL_LOAD: 'manualLoad' + } + this.loadingScheme = this.loadingSchemes.LAZY_LOAD; + this.defaultZoneFile = + this.loadingScheme == this.loadingSchemes.PRELOAD_ALL ? + this.zoneFiles : 'northamerica'; + this.loadedZones = {}; + this.zones = {}; + this.rules = {}; + + this.init = function (o) { + var opts = { async: true }; + var sync = false; + var def = this.defaultZoneFile; + var parsed; + // Override default with any passed-in opts + for (var p in o) { + opts[p] = o[p]; + } + if (typeof def == 'string') { + parsed = this.loadZoneFile(def, opts); + } + else { + if (opts.callback) { + throw new Error('Async load with callback is not supported for multiple default zonefiles.'); + } + for (var i = 0; i < def.length; i++) { + parsed = this.loadZoneFile(def[i], opts); + } + } + }; + // Get the zone files via XHR -- if the sync flag + // is set to true, it's being called by the lazy-loading + // mechanism, so the result needs to be returned inline + this.loadZoneFile = function (fileName, opts) { + if (typeof this.zoneFileBasePath == 'undefined') { + throw new Error('Please define a base path to your zone file directory -- timezoneJS.timezone.zoneFileBasePath.'); + } + // ======================== + // Define your own transport mechanism here + // and comment out the default below + // ======================== + var parsed = builtInLoadZoneFile(fileName, opts); + this.loadedZones[fileName] = parsed; + return parsed; + }; + this.loadZoneJSONData = function (url, sync) { + var processData = function (data) { + data = eval('('+ data +')'); + for (var z in data.zones) { + _this.zones[z] = data.zones[z]; + } + for (var r in data.rules) { + _this.rules[r] = data.rules[r]; + } + } + if (sync) { + var data = fleegix.xhr.doGet(url); + processData(data); + } + else { + fleegix.xhr.doGet(processData, url); + } + }; + this.loadZoneDataFromObject = function (data) { + if (!data) { return; } + for (var z in data.zones) { + _this.zones[z] = data.zones[z]; + } + for (var r in data.rules) { + _this.rules[r] = data.rules[r]; + } + }; + this.getAllZones = function() { + var arr = []; + for (z in this.zones) { arr.push(z); } + return arr.sort(); + }; + this.parseZones = function(str) { + var s = ''; + var lines = str.split('\n'); + var arr = []; + var chunk = ''; + var zone = null; + var rule = null; + for (var i = 0; i < lines.length; i++) { + l = lines[i]; + if (l.match(/^\s/)) { + l = "Zone " + zone + l; + } + l = l.split("#")[0]; + if (l.length > 3) { + arr = l.split(/\s+/); + chunk = arr.shift(); + switch(chunk) { + case 'Zone': + zone = arr.shift(); + if (!_this.zones[zone]) { _this.zones[zone] = [] } + _this.zones[zone].push(arr); + break; + case 'Rule': + rule = arr.shift(); + if (!_this.rules[rule]) { _this.rules[rule] = [] } + _this.rules[rule].push(arr); + break; + case 'Link': + // No zones for these should already exist + if (_this.zones[arr[1]]) { + throw new Error('Error with Link ' + arr[1]); + } + // Create the link + _this.zones[arr[1]] = arr[0]; + break; + case 'Leap': + break; + default: + // Fail silently + break; + } + } + } + return true; + }; + this.getTzInfo = function(dt, tz, isUTC) { + // Lazy-load any zones not yet loaded + if (this.loadingScheme == this.loadingSchemes.LAZY_LOAD) { + // Get the correct region for the zone + var zoneFile = getRegionForTimezone(tz); + if (!zoneFile) { + throw new Error('Not a valid timezone ID.'); + } + else { + if (!this.loadedZones[zoneFile]) { + // Get the file and parse it -- use synchronous XHR + var parsed = this.loadZoneFile(zoneFile, true); + } + } + } + var zone = getZone(dt, tz); + var off = getBasicOffset(zone); + // See if the offset needs adjustment + var rule = getRule(dt, zone, isUTC); + if (rule) { + off = getAdjustedOffset(off, rule); + } + var abbr = getAbbreviation(zone, rule); + return { tzOffset: off, tzAbbr: abbr }; + } +} + + diff --git a/examples/index.html b/examples/index.html index ef85363..39a13be 100644 --- a/examples/index.html +++ b/examples/index.html @@ -31,7 +31,7 @@
  • Using other symbols than circles for points (with symbol plugin)
  • -
  • Plotting time series and visitors per day with zooming and weekends (with selection plugin)
  • +
  • Plotting time series, visitors per day with zooming and weekends (with selection plugin) and time zone support
  • Multiple axes and interacting with the axes
  • Thresholding the data (with threshold plugin)
  • Stacked charts (with stacking plugin)
  • diff --git a/examples/multiple-axes.html b/examples/multiple-axes.html index 4b32e64..fc4ba22 100644 --- a/examples/multiple-axes.html +++ b/examples/multiple-axes.html @@ -7,6 +7,7 @@ +

    Flot Examples

    diff --git a/examples/time.html b/examples/time.html index da62347..31139cf 100644 --- a/examples/time.html +++ b/examples/time.html @@ -7,6 +7,7 @@ +

    Flot Examples

    diff --git a/examples/timezones.html b/examples/timezones.html new file mode 100644 index 0000000..97c4bd9 --- /dev/null +++ b/examples/timezones.html @@ -0,0 +1,74 @@ + + + + + Flot Example + + + + + + + + + +

    Timezone Examples

    + + + + +
    UTC
    Browser
    Chicago
    + + + + + diff --git a/examples/tz/africa b/examples/tz/africa new file mode 100644 index 0000000..c42e951 --- /dev/null +++ b/examples/tz/africa @@ -0,0 +1,314 @@ + +Rule Algeria 1916 only - Jun 14 23:00s 1:00 S +Rule Algeria 1916 1919 - Oct Sun>=1 23:00s 0 - +Rule Algeria 1917 only - Mar 24 23:00s 1:00 S +Rule Algeria 1918 only - Mar 9 23:00s 1:00 S +Rule Algeria 1919 only - Mar 1 23:00s 1:00 S +Rule Algeria 1920 only - Feb 14 23:00s 1:00 S +Rule Algeria 1920 only - Oct 23 23:00s 0 - +Rule Algeria 1921 only - Mar 14 23:00s 1:00 S +Rule Algeria 1921 only - Jun 21 23:00s 0 - +Rule Algeria 1939 only - Sep 11 23:00s 1:00 S +Rule Algeria 1939 only - Nov 19 1:00 0 - +Rule Algeria 1944 1945 - Apr Mon>=1 2:00 1:00 S +Rule Algeria 1944 only - Oct 8 2:00 0 - +Rule Algeria 1945 only - Sep 16 1:00 0 - +Rule Algeria 1971 only - Apr 25 23:00s 1:00 S +Rule Algeria 1971 only - Sep 26 23:00s 0 - +Rule Algeria 1977 only - May 6 0:00 1:00 S +Rule Algeria 1977 only - Oct 21 0:00 0 - +Rule Algeria 1978 only - Mar 24 1:00 1:00 S +Rule Algeria 1978 only - Sep 22 3:00 0 - +Rule Algeria 1980 only - Apr 25 0:00 1:00 S +Rule Algeria 1980 only - Oct 31 2:00 0 - +Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01 + 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time + 0:00 Algeria WE%sT 1940 Feb 25 2:00 + 1:00 Algeria CE%sT 1946 Oct 7 + 0:00 - WET 1956 Jan 29 + 1:00 - CET 1963 Apr 14 + 0:00 Algeria WE%sT 1977 Oct 21 + 1:00 Algeria CE%sT 1979 Oct 26 + 0:00 Algeria WE%sT 1981 May + 1:00 - CET +Zone Africa/Luanda 0:52:56 - LMT 1892 + 0:52:04 - AOT 1911 May 26 # Angola Time + 1:00 - WAT +Zone Africa/Porto-Novo 0:10:28 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + 1:00 - WAT +Zone Africa/Gaborone 1:43:40 - LMT 1885 + 2:00 - CAT 1943 Sep 19 2:00 + 2:00 1:00 CAST 1944 Mar 19 2:00 + 2:00 - CAT +Zone Africa/Ouagadougou -0:06:04 - LMT 1912 + 0:00 - GMT +Zone Africa/Bujumbura 1:57:28 - LMT 1890 + 2:00 - CAT +Zone Africa/Douala 0:38:48 - LMT 1912 + 1:00 - WAT +Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia + -2:00 - CVT 1942 Sep + -2:00 1:00 CVST 1945 Oct 15 + -2:00 - CVT 1975 Nov 25 2:00 + -1:00 - CVT +Zone Africa/Bangui 1:14:20 - LMT 1912 + 1:00 - WAT +Zone Africa/Ndjamena 1:00:12 - LMT 1912 + 1:00 - WAT 1979 Oct 14 + 1:00 1:00 WAST 1980 Mar 8 + 1:00 - WAT +Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro + 3:00 - EAT +Zone Africa/Kinshasa 1:01:12 - LMT 1897 Nov 9 + 1:00 - WAT +Zone Africa/Lubumbashi 1:49:52 - LMT 1897 Nov 9 + 2:00 - CAT +Zone Africa/Brazzaville 1:01:08 - LMT 1912 + 1:00 - WAT +Zone Africa/Abidjan -0:16:08 - LMT 1912 + 0:00 - GMT +Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul + 3:00 - EAT +Rule Egypt 1940 only - Jul 15 0:00 1:00 S +Rule Egypt 1940 only - Oct 1 0:00 0 - +Rule Egypt 1941 only - Apr 15 0:00 1:00 S +Rule Egypt 1941 only - Sep 16 0:00 0 - +Rule Egypt 1942 1944 - Apr 1 0:00 1:00 S +Rule Egypt 1942 only - Oct 27 0:00 0 - +Rule Egypt 1943 1945 - Nov 1 0:00 0 - +Rule Egypt 1945 only - Apr 16 0:00 1:00 S +Rule Egypt 1957 only - May 10 0:00 1:00 S +Rule Egypt 1957 1958 - Oct 1 0:00 0 - +Rule Egypt 1958 only - May 1 0:00 1:00 S +Rule Egypt 1959 1981 - May 1 1:00 1:00 S +Rule Egypt 1959 1965 - Sep 30 3:00 0 - +Rule Egypt 1966 1994 - Oct 1 3:00 0 - +Rule Egypt 1982 only - Jul 25 1:00 1:00 S +Rule Egypt 1983 only - Jul 12 1:00 1:00 S +Rule Egypt 1984 1988 - May 1 1:00 1:00 S +Rule Egypt 1989 only - May 6 1:00 1:00 S +Rule Egypt 1990 1994 - May 1 1:00 1:00 S +Rule Egypt 1995 max - Apr lastFri 0:00s 1:00 S +Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 - +Rule Egypt 2006 only - Sep 21 23:00s 0 - +Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 - +Rule Egypt 2008 only - Aug lastThu 23:00s 0 - +Rule Egypt 2009 only - Aug 20 23:00s 0 - +Rule Egypt 2010 only - Aug 11 0:00 0 - +Rule Egypt 2010 only - Sep 10 0:00 1:00 S +Rule Egypt 2010 max - Sep lastThu 23:00s 0 - +Zone Africa/Cairo 2:05:00 - LMT 1900 Oct + 2:00 Egypt EE%sT +Zone Africa/Malabo 0:35:08 - LMT 1912 + 0:00 - GMT 1963 Dec 15 + 1:00 - WAT +Zone Africa/Asmara 2:35:32 - LMT 1870 + 2:35:32 - AMT 1890 # Asmara Mean Time + 2:35:20 - ADMT 1936 May 5 # Adis Dera MT + 3:00 - EAT +Zone Africa/Addis_Ababa 2:34:48 - LMT 1870 + 2:35:20 - ADMT 1936 May 5 # Adis Dera MT + 3:00 - EAT +Zone Africa/Libreville 0:37:48 - LMT 1912 + 1:00 - WAT +Zone Africa/Banjul -1:06:36 - LMT 1912 + -1:06:36 - BMT 1935 # Banjul Mean Time + -1:00 - WAT 1964 + 0:00 - GMT +Rule Ghana 1936 1942 - Sep 1 0:00 0:20 GHST +Rule Ghana 1936 1942 - Dec 31 0:00 0 GMT +Zone Africa/Accra -0:00:52 - LMT 1918 + 0:00 Ghana %s +Zone Africa/Conakry -0:54:52 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + -1:00 - WAT 1960 + 0:00 - GMT +Zone Africa/Bissau -1:02:20 - LMT 1911 May 26 + -1:00 - WAT 1975 + 0:00 - GMT +Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul + 3:00 - EAT 1930 + 2:30 - BEAT 1940 + 2:44:45 - BEAUT 1960 + 3:00 - EAT +Zone Africa/Maseru 1:50:00 - LMT 1903 Mar + 2:00 - SAST 1943 Sep 19 2:00 + 2:00 1:00 SAST 1944 Mar 19 2:00 + 2:00 - SAST +Zone Africa/Monrovia -0:43:08 - LMT 1882 + -0:43:08 - MMT 1919 Mar # Monrovia Mean Time + -0:44:30 - LRT 1972 May # Liberia Time + 0:00 - GMT +Rule Libya 1951 only - Oct 14 2:00 1:00 S +Rule Libya 1952 only - Jan 1 0:00 0 - +Rule Libya 1953 only - Oct 9 2:00 1:00 S +Rule Libya 1954 only - Jan 1 0:00 0 - +Rule Libya 1955 only - Sep 30 0:00 1:00 S +Rule Libya 1956 only - Jan 1 0:00 0 - +Rule Libya 1982 1984 - Apr 1 0:00 1:00 S +Rule Libya 1982 1985 - Oct 1 0:00 0 - +Rule Libya 1985 only - Apr 6 0:00 1:00 S +Rule Libya 1986 only - Apr 4 0:00 1:00 S +Rule Libya 1986 only - Oct 3 0:00 0 - +Rule Libya 1987 1989 - Apr 1 0:00 1:00 S +Rule Libya 1987 1989 - Oct 1 0:00 0 - +Zone Africa/Tripoli 0:52:44 - LMT 1920 + 1:00 Libya CE%sT 1959 + 2:00 - EET 1982 + 1:00 Libya CE%sT 1990 May 4 + 2:00 - EET 1996 Sep 30 + 1:00 - CET 1997 Apr 4 + 1:00 1:00 CEST 1997 Oct 4 + 2:00 - EET +Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul + 3:00 - EAT 1954 Feb 27 23:00s + 3:00 1:00 EAST 1954 May 29 23:00s + 3:00 - EAT +Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar + 2:00 - CAT +Zone Africa/Bamako -0:32:00 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + -1:00 - WAT 1960 Jun 20 + 0:00 - GMT +Zone Africa/Nouakchott -1:03:48 - LMT 1912 + 0:00 - GMT 1934 Feb 26 + -1:00 - WAT 1960 Nov 28 + 0:00 - GMT +Rule Mauritius 1982 only - Oct 10 0:00 1:00 S +Rule Mauritius 1983 only - Mar 21 0:00 0 - +Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 S +Rule Mauritius 2009 only - Mar lastSun 2:00 0 - +Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis + 4:00 Mauritius MU%sT # Mauritius Time +Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou + 3:00 - EAT +Rule Morocco 1939 only - Sep 12 0:00 1:00 S +Rule Morocco 1939 only - Nov 19 0:00 0 - +Rule Morocco 1940 only - Feb 25 0:00 1:00 S +Rule Morocco 1945 only - Nov 18 0:00 0 - +Rule Morocco 1950 only - Jun 11 0:00 1:00 S +Rule Morocco 1950 only - Oct 29 0:00 0 - +Rule Morocco 1967 only - Jun 3 12:00 1:00 S +Rule Morocco 1967 only - Oct 1 0:00 0 - +Rule Morocco 1974 only - Jun 24 0:00 1:00 S +Rule Morocco 1974 only - Sep 1 0:00 0 - +Rule Morocco 1976 1977 - May 1 0:00 1:00 S +Rule Morocco 1976 only - Aug 1 0:00 0 - +Rule Morocco 1977 only - Sep 28 0:00 0 - +Rule Morocco 1978 only - Jun 1 0:00 1:00 S +Rule Morocco 1978 only - Aug 4 0:00 0 - +Rule Morocco 2008 only - Jun 1 0:00 1:00 S +Rule Morocco 2008 only - Sep 1 0:00 0 - +Rule Morocco 2009 only - Jun 1 0:00 1:00 S +Rule Morocco 2009 only - Aug 21 0:00 0 - +Rule Morocco 2010 only - May 2 0:00 1:00 S +Rule Morocco 2010 only - Aug 8 0:00 0 - +Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26 + 0:00 Morocco WE%sT 1984 Mar 16 + 1:00 - CET 1986 + 0:00 Morocco WE%sT +Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan + -1:00 - WAT 1976 Apr 14 + 0:00 - WET +Zone Africa/Maputo 2:10:20 - LMT 1903 Mar + 2:00 - CAT +Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S +Rule Namibia 1995 max - Apr Sun>=1 2:00 0 - +Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8 + 1:30 - SWAT 1903 Mar # SW Africa Time + 2:00 - SAST 1942 Sep 20 2:00 + 2:00 1:00 SAST 1943 Mar 21 2:00 + 2:00 - SAST 1990 Mar 21 # independence + 2:00 - CAT 1994 Apr 3 + 1:00 Namibia WA%sT +Zone Africa/Niamey 0:08:28 - LMT 1912 + -1:00 - WAT 1934 Feb 26 + 0:00 - GMT 1960 + 1:00 - WAT +Zone Africa/Lagos 0:13:36 - LMT 1919 Sep + 1:00 - WAT +Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis + 4:00 - RET # Reunion Time +Zone Africa/Kigali 2:00:16 - LMT 1935 Jun + 2:00 - CAT +Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown + -0:22:48 - JMT 1951 # Jamestown Mean Time + 0:00 - GMT +Zone Africa/Sao_Tome 0:26:56 - LMT 1884 + -0:36:32 - LMT 1912 # Lisbon Mean Time + 0:00 - GMT +Zone Africa/Dakar -1:09:44 - LMT 1912 + -1:00 - WAT 1941 Jun + 0:00 - GMT +Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria + 4:00 - SCT # Seychelles Time +Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST +Rule SL 1935 1942 - Oct 1 0:00 0 WAT +Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST +Rule SL 1957 1962 - Sep 1 0:00 0 GMT +Zone Africa/Freetown -0:53:00 - LMT 1882 + -0:53:00 - FMT 1913 Jun # Freetown Mean Time + -1:00 SL %s 1957 + 0:00 SL %s +Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov + 3:00 - EAT 1931 + 2:30 - BEAT 1957 + 3:00 - EAT +Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 - +Rule SA 1943 1944 - Mar Sun>=15 2:00 0 - +Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8 + 1:30 - SAST 1903 Mar + 2:00 SA SAST +Rule Sudan 1970 only - May 1 0:00 1:00 S +Rule Sudan 1970 1985 - Oct 15 0:00 0 - +Rule Sudan 1971 only - Apr 30 0:00 1:00 S +Rule Sudan 1972 1985 - Apr lastSun 0:00 1:00 S +Zone Africa/Khartoum 2:10:08 - LMT 1931 + 2:00 Sudan CA%sT 2000 Jan 15 12:00 + 3:00 - EAT +Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar + 2:00 - SAST +Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931 + 3:00 - EAT 1948 + 2:44:45 - BEAUT 1961 + 3:00 - EAT +Zone Africa/Lome 0:04:52 - LMT 1893 + 0:00 - GMT +Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S +Rule Tunisia 1939 only - Nov 18 23:00s 0 - +Rule Tunisia 1940 only - Feb 25 23:00s 1:00 S +Rule Tunisia 1941 only - Oct 6 0:00 0 - +Rule Tunisia 1942 only - Mar 9 0:00 1:00 S +Rule Tunisia 1942 only - Nov 2 3:00 0 - +Rule Tunisia 1943 only - Mar 29 2:00 1:00 S +Rule Tunisia 1943 only - Apr 17 2:00 0 - +Rule Tunisia 1943 only - Apr 25 2:00 1:00 S +Rule Tunisia 1943 only - Oct 4 2:00 0 - +Rule Tunisia 1944 1945 - Apr Mon>=1 2:00 1:00 S +Rule Tunisia 1944 only - Oct 8 0:00 0 - +Rule Tunisia 1945 only - Sep 16 0:00 0 - +Rule Tunisia 1977 only - Apr 30 0:00s 1:00 S +Rule Tunisia 1977 only - Sep 24 0:00s 0 - +Rule Tunisia 1978 only - May 1 0:00s 1:00 S +Rule Tunisia 1978 only - Oct 1 0:00s 0 - +Rule Tunisia 1988 only - Jun 1 0:00s 1:00 S +Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 - +Rule Tunisia 1989 only - Mar 26 0:00s 1:00 S +Rule Tunisia 1990 only - May 1 0:00s 1:00 S +Rule Tunisia 2005 only - May 1 0:00s 1:00 S +Rule Tunisia 2005 only - Sep 30 1:00s 0 - +Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S +Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 - +Zone Africa/Tunis 0:40:44 - LMT 1881 May 12 + 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time + 1:00 Tunisia CE%sT +Zone Africa/Kampala 2:09:40 - LMT 1928 Jul + 3:00 - EAT 1930 + 2:30 - BEAT 1948 + 2:44:45 - BEAUT 1957 + 3:00 - EAT +Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar + 2:00 - CAT +Zone Africa/Harare 2:04:12 - LMT 1903 Mar + 2:00 - CAT diff --git a/examples/tz/antarctica b/examples/tz/antarctica new file mode 100644 index 0000000..4757eca --- /dev/null +++ b/examples/tz/antarctica @@ -0,0 +1,108 @@ +Rule RussAQ 1981 1984 - Apr 1 0:00 1:00 S +Rule RussAQ 1981 1983 - Oct 1 0:00 0 - +Rule RussAQ 1984 1991 - Sep lastSun 2:00s 0 - +Rule RussAQ 1985 1991 - Mar lastSun 2:00s 1:00 S +Rule RussAQ 1992 only - Mar lastSat 23:00 1:00 S +Rule RussAQ 1992 only - Sep lastSat 23:00 0 - +Rule RussAQ 1993 max - Mar lastSun 2:00s 1:00 S +Rule RussAQ 1993 1995 - Sep lastSun 2:00s 0 - +Rule RussAQ 1996 max - Oct lastSun 2:00s 0 - +Rule ArgAQ 1964 1966 - Mar 1 0:00 0 - +Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S +Rule ArgAQ 1967 only - Apr 2 0:00 0 - +Rule ArgAQ 1967 1968 - Oct Sun>=1 0:00 1:00 S +Rule ArgAQ 1968 1969 - Apr Sun>=1 0:00 0 - +Rule ArgAQ 1974 only - Jan 23 0:00 1:00 S +Rule ArgAQ 1974 only - May 1 0:00 0 - +Rule ChileAQ 1972 1986 - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1974 1987 - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 1987 only - Apr 12 3:00u 0 - +Rule ChileAQ 1988 1989 - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1988 only - Oct Sun>=1 4:00u 1:00 S +Rule ChileAQ 1989 only - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 1990 only - Mar 18 3:00u 0 - +Rule ChileAQ 1990 only - Sep 16 4:00u 1:00 S +Rule ChileAQ 1991 1996 - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1991 1997 - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 1997 only - Mar 30 3:00u 0 - +Rule ChileAQ 1998 only - Mar Sun>=9 3:00u 0 - +Rule ChileAQ 1998 only - Sep 27 4:00u 1:00 S +Rule ChileAQ 1999 only - Apr 4 3:00u 0 - +Rule ChileAQ 1999 max - Oct Sun>=9 4:00u 1:00 S +Rule ChileAQ 2000 max - Mar Sun>=9 3:00u 0 - +Rule AusAQ 1917 only - Jan 1 0:01 1:00 - +Rule AusAQ 1917 only - Mar 25 2:00 0 - +Rule AusAQ 1942 only - Jan 1 2:00 1:00 - +Rule AusAQ 1942 only - Mar 29 2:00 0 - +Rule AusAQ 1942 only - Sep 27 2:00 1:00 - +Rule AusAQ 1943 1944 - Mar lastSun 2:00 0 - +Rule AusAQ 1943 only - Oct 3 2:00 1:00 - +Rule ATAQ 1967 only - Oct Sun>=1 2:00s 1:00 - +Rule ATAQ 1968 only - Mar lastSun 2:00s 0 - +Rule ATAQ 1968 1985 - Oct lastSun 2:00s 1:00 - +Rule ATAQ 1969 1971 - Mar Sun>=8 2:00s 0 - +Rule ATAQ 1972 only - Feb lastSun 2:00s 0 - +Rule ATAQ 1973 1981 - Mar Sun>=1 2:00s 0 - +Rule ATAQ 1982 1983 - Mar lastSun 2:00s 0 - +Rule ATAQ 1984 1986 - Mar Sun>=1 2:00s 0 - +Rule ATAQ 1986 only - Oct Sun>=15 2:00s 1:00 - +Rule ATAQ 1987 1990 - Mar Sun>=15 2:00s 0 - +Rule ATAQ 1987 only - Oct Sun>=22 2:00s 1:00 - +Rule ATAQ 1988 1990 - Oct lastSun 2:00s 1:00 - +Rule ATAQ 1991 1999 - Oct Sun>=1 2:00s 1:00 - +Rule ATAQ 1991 2005 - Mar lastSun 2:00s 0 - +Rule ATAQ 2000 only - Aug lastSun 2:00s 1:00 - +Rule ATAQ 2001 max - Oct Sun>=1 2:00s 1:00 - +Rule ATAQ 2006 only - Apr Sun>=1 2:00s 0 - +Rule ATAQ 2007 only - Mar lastSun 2:00s 0 - +Rule ATAQ 2008 max - Apr Sun>=1 2:00s 0 - +Zone Antarctica/Casey 0 - zzz 1969 + 8:00 - WST 2009 Oct 18 2:00 + # Western (Aus) Standard Time + 11:00 - CAST 2010 Mar 5 2:00 + # Casey Time + 8:00 - WST +Zone Antarctica/Davis 0 - zzz 1957 Jan 13 + 7:00 - DAVT 1964 Nov # Davis Time + 0 - zzz 1969 Feb + 7:00 - DAVT 2009 Oct 18 2:00 + 5:00 - DAVT 2010 Mar 10 20:00u + 7:00 - DAVT +Zone Antarctica/Mawson 0 - zzz 1954 Feb 13 + 6:00 - MAWT 2009 Oct 18 2:00 + # Mawson Time + 5:00 - MAWT +Zone Antarctica/Macquarie 0 - zzz 1911 + 10:00 - EST 1916 Oct 1 2:00 + 10:00 1:00 EST 1917 Feb + 10:00 AusAQ EST 1967 + 10:00 ATAQ EST 2010 Apr 4 3:00 + 11:00 - MIST # Macquarie Island Time +Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Francais + 5:00 - TFT # ISO code TF Time +Zone Antarctica/DumontDUrville 0 - zzz 1947 + 10:00 - PMT 1952 Jan 14 # Port-Martin Time + 0 - zzz 1956 Nov + 10:00 - DDUT # Dumont-d'Urville Time +Zone Antarctica/Syowa 0 - zzz 1957 Jan 29 + 3:00 - SYOT # Syowa Time +Rule NZAQ 1974 only - Nov 3 2:00s 1:00 D +Rule NZAQ 1975 1988 - Oct lastSun 2:00s 1:00 D +Rule NZAQ 1989 only - Oct 8 2:00s 1:00 D +Rule NZAQ 1990 2006 - Oct Sun>=1 2:00s 1:00 D +Rule NZAQ 1975 only - Feb 23 2:00s 0 S +Rule NZAQ 1976 1989 - Mar Sun>=1 2:00s 0 S +Rule NZAQ 1990 2007 - Mar Sun>=15 2:00s 0 S +Rule NZAQ 2007 max - Sep lastSun 2:00s 1:00 D +Rule NZAQ 2008 max - Apr Sun>=1 2:00s 0 S +Zone Antarctica/Vostok 0 - zzz 1957 Dec 16 + 6:00 - VOST # Vostok time +Zone Antarctica/Rothera 0 - zzz 1976 Dec 1 + -3:00 - ROTT # Rothera time +Zone Antarctica/Palmer 0 - zzz 1965 + -4:00 ArgAQ AR%sT 1969 Oct 5 + -3:00 ArgAQ AR%sT 1982 May + -4:00 ChileAQ CL%sT +Zone Antarctica/McMurdo 0 - zzz 1956 + 12:00 NZAQ NZ%sT +Link Antarctica/McMurdo Antarctica/South_Pole diff --git a/examples/tz/asia b/examples/tz/asia new file mode 100644 index 0000000..00b7bd8 --- /dev/null +++ b/examples/tz/asia @@ -0,0 +1,731 @@ +Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S +Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 - +Rule EUAsia 1996 max - Oct lastSun 1:00u 0 - +Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S +Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 - +Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 - +Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S +Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 - +Rule RussiaAsia 1984 1991 - Sep lastSun 2:00s 0 - +Rule RussiaAsia 1985 1991 - Mar lastSun 2:00s 1:00 S +Rule RussiaAsia 1992 only - Mar lastSat 23:00 1:00 S +Rule RussiaAsia 1992 only - Sep lastSat 23:00 0 - +Rule RussiaAsia 1993 max - Mar lastSun 2:00s 1:00 S +Rule RussiaAsia 1993 1995 - Sep lastSun 2:00s 0 - +Rule RussiaAsia 1996 max - Oct lastSun 2:00s 0 - +Zone Asia/Kabul 4:36:48 - LMT 1890 + 4:00 - AFT 1945 + 4:30 - AFT +Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2 + 3:00 - YERT 1957 Mar # Yerevan Time + 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s + 3:00 1:00 YERST 1991 Sep 23 # independence + 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s + 4:00 - AMT 1997 + 4:00 RussiaAsia AM%sT +Rule Azer 1997 max - Mar lastSun 4:00 1:00 S +Rule Azer 1997 max - Oct lastSun 5:00 0 - +Zone Asia/Baku 3:19:24 - LMT 1924 May 2 + 3:00 - BAKT 1957 Mar # Baku Time + 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s + 3:00 1:00 BAKST 1991 Aug 30 # independence + 3:00 RussiaAsia AZ%sT 1992 Sep lastSat 23:00 + 4:00 - AZT 1996 # Azerbaijan time + 4:00 EUAsia AZ%sT 1997 + 4:00 Azer AZ%sT +Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah + 4:00 - GST 1972 Jun + 3:00 - AST +Rule Dhaka 2009 only - Jun 19 23:00 1:00 S +Rule Dhaka 2009 only - Dec 31 23:59 0 - +Zone Asia/Dhaka 6:01:40 - LMT 1890 + 5:53:20 - HMT 1941 Oct # Howrah Mean Time? + 6:30 - BURT 1942 May 15 # Burma Time + 5:30 - IST 1942 Sep + 6:30 - BURT 1951 Sep 30 + 6:00 - DACT 1971 Mar 26 # Dacca Time + 6:00 - BDT 2009 + 6:00 Dhaka BD%sT +Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu + 5:30 - IST 1987 Oct + 6:00 - BTT # Bhutan Time +Zone Indian/Chagos 4:49:40 - LMT 1907 + 5:00 - IOT 1996 # BIOT Time + 6:00 - IOT +Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan + 7:30 - BNT 1933 + 8:00 - BNT +Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon + 6:24:36 - RMT 1920 # Rangoon Mean Time? + 6:30 - BURT 1942 May # Burma Time + 9:00 - JST 1945 May 3 + 6:30 - MMT # Myanmar Time +Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9 + 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? + 7:00 - ICT 1912 May + 8:00 - ICT 1931 May + 7:00 - ICT +Rule Shang 1940 only - Jun 3 0:00 1:00 D +Rule Shang 1940 1941 - Oct 1 0:00 0 S +Rule Shang 1941 only - Mar 16 0:00 1:00 D +Rule PRC 1986 only - May 4 0:00 1:00 D +Rule PRC 1986 1991 - Sep Sun>=11 0:00 0 S +Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D +Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin + 8:30 - CHAT 1932 Mar # Changbai Time + 8:00 - CST 1940 + 9:00 - CHAT 1966 May + 8:30 - CHAT 1980 May + 8:00 PRC C%sT +Zone Asia/Shanghai 8:05:52 - LMT 1928 + 8:00 Shang C%sT 1949 + 8:00 PRC C%sT +Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking + 7:00 - LONT 1980 May # Long-shu Time + 8:00 PRC C%sT +Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi + 6:00 - URUT 1980 May # Urumqi Time + 8:00 PRC C%sT +Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar + 5:30 - KAST 1940 # Kashgar Time + 5:00 - KAST 1980 May + 8:00 PRC C%sT +Rule HK 1941 only - Apr 1 3:30 1:00 S +Rule HK 1941 only - Sep 30 3:30 0 - +Rule HK 1946 only - Apr 20 3:30 1:00 S +Rule HK 1946 only - Dec 1 3:30 0 - +Rule HK 1947 only - Apr 13 3:30 1:00 S +Rule HK 1947 only - Dec 30 3:30 0 - +Rule HK 1948 only - May 2 3:30 1:00 S +Rule HK 1948 1951 - Oct lastSun 3:30 0 - +Rule HK 1952 only - Oct 25 3:30 0 - +Rule HK 1949 1953 - Apr Sun>=1 3:30 1:00 S +Rule HK 1953 only - Nov 1 3:30 0 - +Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S +Rule HK 1954 only - Oct 31 3:30 0 - +Rule HK 1955 1964 - Nov Sun>=1 3:30 0 - +Rule HK 1965 1976 - Apr Sun>=16 3:30 1:00 S +Rule HK 1965 1976 - Oct Sun>=16 3:30 0 - +Rule HK 1973 only - Dec 30 3:30 1:00 S +Rule HK 1979 only - May Sun>=8 3:30 1:00 S +Rule HK 1979 only - Oct Sun>=16 3:30 0 - +Zone Asia/Hong_Kong 7:36:36 - LMT 1904 Oct 30 + 8:00 HK HK%sT 1941 Dec 25 + 9:00 - JST 1945 Sep 15 + 8:00 HK HK%sT +Rule Taiwan 1945 1951 - May 1 0:00 1:00 D +Rule Taiwan 1945 1951 - Oct 1 0:00 0 S +Rule Taiwan 1952 only - Mar 1 0:00 1:00 D +Rule Taiwan 1952 1954 - Nov 1 0:00 0 S +Rule Taiwan 1953 1959 - Apr 1 0:00 1:00 D +Rule Taiwan 1955 1961 - Oct 1 0:00 0 S +Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 D +Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 D +Rule Taiwan 1974 1975 - Oct 1 0:00 0 S +Rule Taiwan 1979 only - Jun 30 0:00 1:00 D +Rule Taiwan 1979 only - Sep 30 0:00 0 S +Zone Asia/Taipei 8:06:00 - LMT 1896 # or Taibei or T'ai-pei + 8:00 Taiwan C%sT +Rule Macau 1961 1962 - Mar Sun>=16 3:30 1:00 S +Rule Macau 1961 1964 - Nov Sun>=1 3:30 0 - +Rule Macau 1963 only - Mar Sun>=16 0:00 1:00 S +Rule Macau 1964 only - Mar Sun>=16 3:30 1:00 S +Rule Macau 1965 only - Mar Sun>=16 0:00 1:00 S +Rule Macau 1965 only - Oct 31 0:00 0 - +Rule Macau 1966 1971 - Apr Sun>=16 3:30 1:00 S +Rule Macau 1966 1971 - Oct Sun>=16 3:30 0 - +Rule Macau 1972 1974 - Apr Sun>=15 0:00 1:00 S +Rule Macau 1972 1973 - Oct Sun>=15 0:00 0 - +Rule Macau 1974 1977 - Oct Sun>=15 3:30 0 - +Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 S +Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 S +Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 - +Zone Asia/Macau 7:34:20 - LMT 1912 + 8:00 Macau MO%sT 1999 Dec 20 # return to China + 8:00 PRC C%sT +Rule Cyprus 1975 only - Apr 13 0:00 1:00 S +Rule Cyprus 1975 only - Oct 12 0:00 0 - +Rule Cyprus 1976 only - May 15 0:00 1:00 S +Rule Cyprus 1976 only - Oct 11 0:00 0 - +Rule Cyprus 1977 1980 - Apr Sun>=1 0:00 1:00 S +Rule Cyprus 1977 only - Sep 25 0:00 0 - +Rule Cyprus 1978 only - Oct 2 0:00 0 - +Rule Cyprus 1979 1997 - Sep lastSun 0:00 0 - +Rule Cyprus 1981 1998 - Mar lastSun 0:00 1:00 S +Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14 + 2:00 Cyprus EE%sT 1998 Sep + 2:00 EUAsia EE%sT +Link Asia/Nicosia Europe/Nicosia +Zone Asia/Tbilisi 2:59:16 - LMT 1880 + 2:59:16 - TBMT 1924 May 2 # Tbilisi Mean Time + 3:00 - TBIT 1957 Mar # Tbilisi Time + 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s + 3:00 1:00 TBIST 1991 Apr 9 # independence + 3:00 RussiaAsia GE%sT 1992 # Georgia Time + 3:00 E-EurAsia GE%sT 1994 Sep lastSun + 4:00 E-EurAsia GE%sT 1996 Oct lastSun + 4:00 1:00 GEST 1997 Mar lastSun + 4:00 E-EurAsia GE%sT 2004 Jun 27 + 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00 + 4:00 - GET +Zone Asia/Dili 8:22:20 - LMT 1912 + 8:00 - TLT 1942 Feb 21 23:00 # E Timor Time + 9:00 - JST 1945 Sep 23 + 9:00 - TLT 1976 May 3 + 8:00 - CIT 2000 Sep 17 00:00 + 9:00 - TLT +Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata + 5:53:20 - HMT 1941 Oct # Howrah Mean Time? + 6:30 - BURT 1942 May 15 # Burma Time + 5:30 - IST 1942 Sep + 5:30 1:00 IST 1945 Oct 15 + 5:30 - IST +Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10 + 7:07:12 - JMT 1923 Dec 31 23:47:12 # Jakarta + 7:20 - JAVT 1932 Nov # Java Time + 7:30 - WIT 1942 Mar 23 + 9:00 - JST 1945 Sep 23 + 7:30 - WIT 1948 May + 8:00 - WIT 1950 May + 7:30 - WIT 1964 + 7:00 - WIT +Zone Asia/Pontianak 7:17:20 - LMT 1908 May + 7:17:20 - PMT 1932 Nov # Pontianak MT + 7:30 - WIT 1942 Jan 29 + 9:00 - JST 1945 Sep 23 + 7:30 - WIT 1948 May + 8:00 - WIT 1950 May + 7:30 - WIT 1964 + 8:00 - CIT 1988 Jan 1 + 7:00 - WIT +Zone Asia/Makassar 7:57:36 - LMT 1920 + 7:57:36 - MMT 1932 Nov # Macassar MT + 8:00 - CIT 1942 Feb 9 + 9:00 - JST 1945 Sep 23 + 8:00 - CIT +Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov + 9:00 - EIT 1944 Sep 1 + 9:30 - CST 1964 + 9:00 - EIT +Rule Iran 1978 1980 - Mar 21 0:00 1:00 D +Rule Iran 1978 only - Oct 21 0:00 0 S +Rule Iran 1979 only - Sep 19 0:00 0 S +Rule Iran 1980 only - Sep 23 0:00 0 S +Rule Iran 1991 only - May 3 0:00 1:00 D +Rule Iran 1992 1995 - Mar 22 0:00 1:00 D +Rule Iran 1991 1995 - Sep 22 0:00 0 S +Rule Iran 1996 only - Mar 21 0:00 1:00 D +Rule Iran 1996 only - Sep 21 0:00 0 S +Rule Iran 1997 1999 - Mar 22 0:00 1:00 D +Rule Iran 1997 1999 - Sep 22 0:00 0 S +Rule Iran 2000 only - Mar 21 0:00 1:00 D +Rule Iran 2000 only - Sep 21 0:00 0 S +Rule Iran 2001 2003 - Mar 22 0:00 1:00 D +Rule Iran 2001 2003 - Sep 22 0:00 0 S +Rule Iran 2004 only - Mar 21 0:00 1:00 D +Rule Iran 2004 only - Sep 21 0:00 0 S +Rule Iran 2005 only - Mar 22 0:00 1:00 D +Rule Iran 2005 only - Sep 22 0:00 0 S +Rule Iran 2008 only - Mar 21 0:00 1:00 D +Rule Iran 2008 only - Sep 21 0:00 0 S +Rule Iran 2009 2011 - Mar 22 0:00 1:00 D +Rule Iran 2009 2011 - Sep 22 0:00 0 S +Rule Iran 2012 only - Mar 21 0:00 1:00 D +Rule Iran 2012 only - Sep 21 0:00 0 S +Rule Iran 2013 2015 - Mar 22 0:00 1:00 D +Rule Iran 2013 2015 - Sep 22 0:00 0 S +Rule Iran 2016 only - Mar 21 0:00 1:00 D +Rule Iran 2016 only - Sep 21 0:00 0 S +Rule Iran 2017 2019 - Mar 22 0:00 1:00 D +Rule Iran 2017 2019 - Sep 22 0:00 0 S +Rule Iran 2020 only - Mar 21 0:00 1:00 D +Rule Iran 2020 only - Sep 21 0:00 0 S +Rule Iran 2021 2023 - Mar 22 0:00 1:00 D +Rule Iran 2021 2023 - Sep 22 0:00 0 S +Rule Iran 2024 only - Mar 21 0:00 1:00 D +Rule Iran 2024 only - Sep 21 0:00 0 S +Rule Iran 2025 2027 - Mar 22 0:00 1:00 D +Rule Iran 2025 2027 - Sep 22 0:00 0 S +Rule Iran 2028 2029 - Mar 21 0:00 1:00 D +Rule Iran 2028 2029 - Sep 21 0:00 0 S +Rule Iran 2030 2031 - Mar 22 0:00 1:00 D +Rule Iran 2030 2031 - Sep 22 0:00 0 S +Rule Iran 2032 2033 - Mar 21 0:00 1:00 D +Rule Iran 2032 2033 - Sep 21 0:00 0 S +Rule Iran 2034 2035 - Mar 22 0:00 1:00 D +Rule Iran 2034 2035 - Sep 22 0:00 0 S +Rule Iran 2036 2037 - Mar 21 0:00 1:00 D +Rule Iran 2036 2037 - Sep 21 0:00 0 S +Zone Asia/Tehran 3:25:44 - LMT 1916 + 3:25:44 - TMT 1946 # Tehran Mean Time + 3:30 - IRST 1977 Nov + 4:00 Iran IR%sT 1979 + 3:30 Iran IR%sT +Rule Iraq 1982 only - May 1 0:00 1:00 D +Rule Iraq 1982 1984 - Oct 1 0:00 0 S +Rule Iraq 1983 only - Mar 31 0:00 1:00 D +Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D +Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S +Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D +Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D +Rule Iraq 1991 2007 - Oct 1 3:00s 0 S +Zone Asia/Baghdad 2:57:40 - LMT 1890 + 2:57:36 - BMT 1918 # Baghdad Mean Time? + 3:00 - AST 1982 May + 3:00 Iraq A%sT +Rule Zion 1940 only - Jun 1 0:00 1:00 D +Rule Zion 1942 1944 - Nov 1 0:00 0 S +Rule Zion 1943 only - Apr 1 2:00 1:00 D +Rule Zion 1944 only - Apr 1 0:00 1:00 D +Rule Zion 1945 only - Apr 16 0:00 1:00 D +Rule Zion 1945 only - Nov 1 2:00 0 S +Rule Zion 1946 only - Apr 16 2:00 1:00 D +Rule Zion 1946 only - Nov 1 0:00 0 S +Rule Zion 1948 only - May 23 0:00 2:00 DD +Rule Zion 1948 only - Sep 1 0:00 1:00 D +Rule Zion 1948 1949 - Nov 1 2:00 0 S +Rule Zion 1949 only - May 1 0:00 1:00 D +Rule Zion 1950 only - Apr 16 0:00 1:00 D +Rule Zion 1950 only - Sep 15 3:00 0 S +Rule Zion 1951 only - Apr 1 0:00 1:00 D +Rule Zion 1951 only - Nov 11 3:00 0 S +Rule Zion 1952 only - Apr 20 2:00 1:00 D +Rule Zion 1952 only - Oct 19 3:00 0 S +Rule Zion 1953 only - Apr 12 2:00 1:00 D +Rule Zion 1953 only - Sep 13 3:00 0 S +Rule Zion 1954 only - Jun 13 0:00 1:00 D +Rule Zion 1954 only - Sep 12 0:00 0 S +Rule Zion 1955 only - Jun 11 2:00 1:00 D +Rule Zion 1955 only - Sep 11 0:00 0 S +Rule Zion 1956 only - Jun 3 0:00 1:00 D +Rule Zion 1956 only - Sep 30 3:00 0 S +Rule Zion 1957 only - Apr 29 2:00 1:00 D +Rule Zion 1957 only - Sep 22 0:00 0 S +Rule Zion 1974 only - Jul 7 0:00 1:00 D +Rule Zion 1974 only - Oct 13 0:00 0 S +Rule Zion 1975 only - Apr 20 0:00 1:00 D +Rule Zion 1975 only - Aug 31 0:00 0 S +Rule Zion 1985 only - Apr 14 0:00 1:00 D +Rule Zion 1985 only - Sep 15 0:00 0 S +Rule Zion 1986 only - May 18 0:00 1:00 D +Rule Zion 1986 only - Sep 7 0:00 0 S +Rule Zion 1987 only - Apr 15 0:00 1:00 D +Rule Zion 1987 only - Sep 13 0:00 0 S +Rule Zion 1988 only - Apr 9 0:00 1:00 D +Rule Zion 1988 only - Sep 3 0:00 0 S +Rule Zion 1989 only - Apr 30 0:00 1:00 D +Rule Zion 1989 only - Sep 3 0:00 0 S +Rule Zion 1990 only - Mar 25 0:00 1:00 D +Rule Zion 1990 only - Aug 26 0:00 0 S +Rule Zion 1991 only - Mar 24 0:00 1:00 D +Rule Zion 1991 only - Sep 1 0:00 0 S +Rule Zion 1992 only - Mar 29 0:00 1:00 D +Rule Zion 1992 only - Sep 6 0:00 0 S +Rule Zion 1993 only - Apr 2 0:00 1:00 D +Rule Zion 1993 only - Sep 5 0:00 0 S +Rule Zion 1994 only - Apr 1 0:00 1:00 D +Rule Zion 1994 only - Aug 28 0:00 0 S +Rule Zion 1995 only - Mar 31 0:00 1:00 D +Rule Zion 1995 only - Sep 3 0:00 0 S +Rule Zion 1996 only - Mar 15 0:00 1:00 D +Rule Zion 1996 only - Sep 16 0:00 0 S +Rule Zion 1997 only - Mar 21 0:00 1:00 D +Rule Zion 1997 only - Sep 14 0:00 0 S +Rule Zion 1998 only - Mar 20 0:00 1:00 D +Rule Zion 1998 only - Sep 6 0:00 0 S +Rule Zion 1999 only - Apr 2 2:00 1:00 D +Rule Zion 1999 only - Sep 3 2:00 0 S +Rule Zion 2000 only - Apr 14 2:00 1:00 D +Rule Zion 2000 only - Oct 6 1:00 0 S +Rule Zion 2001 only - Apr 9 1:00 1:00 D +Rule Zion 2001 only - Sep 24 1:00 0 S +Rule Zion 2002 only - Mar 29 1:00 1:00 D +Rule Zion 2002 only - Oct 7 1:00 0 S +Rule Zion 2003 only - Mar 28 1:00 1:00 D +Rule Zion 2003 only - Oct 3 1:00 0 S +Rule Zion 2004 only - Apr 7 1:00 1:00 D +Rule Zion 2004 only - Sep 22 1:00 0 S +Rule Zion 2005 only - Apr 1 2:00 1:00 D +Rule Zion 2005 only - Oct 9 2:00 0 S +Rule Zion 2006 2010 - Mar Fri>=26 2:00 1:00 D +Rule Zion 2006 only - Oct 1 2:00 0 S +Rule Zion 2007 only - Sep 16 2:00 0 S +Rule Zion 2008 only - Oct 5 2:00 0 S +Rule Zion 2009 only - Sep 27 2:00 0 S +Rule Zion 2010 only - Sep 12 2:00 0 S +Rule Zion 2011 only - Apr 1 2:00 1:00 D +Rule Zion 2011 only - Oct 2 2:00 0 S +Rule Zion 2012 2015 - Mar Fri>=26 2:00 1:00 D +Rule Zion 2012 only - Sep 23 2:00 0 S +Rule Zion 2013 only - Sep 8 2:00 0 S +Rule Zion 2014 only - Sep 28 2:00 0 S +Rule Zion 2015 only - Sep 20 2:00 0 S +Rule Zion 2016 only - Apr 1 2:00 1:00 D +Rule Zion 2016 only - Oct 9 2:00 0 S +Rule Zion 2017 2021 - Mar Fri>=26 2:00 1:00 D +Rule Zion 2017 only - Sep 24 2:00 0 S +Rule Zion 2018 only - Sep 16 2:00 0 S +Rule Zion 2019 only - Oct 6 2:00 0 S +Rule Zion 2020 only - Sep 27 2:00 0 S +Rule Zion 2021 only - Sep 12 2:00 0 S +Rule Zion 2022 only - Apr 1 2:00 1:00 D +Rule Zion 2022 only - Oct 2 2:00 0 S +Rule Zion 2023 2032 - Mar Fri>=26 2:00 1:00 D +Rule Zion 2023 only - Sep 24 2:00 0 S +Rule Zion 2024 only - Oct 6 2:00 0 S +Rule Zion 2025 only - Sep 28 2:00 0 S +Rule Zion 2026 only - Sep 20 2:00 0 S +Rule Zion 2027 only - Oct 10 2:00 0 S +Rule Zion 2028 only - Sep 24 2:00 0 S +Rule Zion 2029 only - Sep 16 2:00 0 S +Rule Zion 2030 only - Oct 6 2:00 0 S +Rule Zion 2031 only - Sep 21 2:00 0 S +Rule Zion 2032 only - Sep 12 2:00 0 S +Rule Zion 2033 only - Apr 1 2:00 1:00 D +Rule Zion 2033 only - Oct 2 2:00 0 S +Rule Zion 2034 2037 - Mar Fri>=26 2:00 1:00 D +Rule Zion 2034 only - Sep 17 2:00 0 S +Rule Zion 2035 only - Oct 7 2:00 0 S +Rule Zion 2036 only - Sep 28 2:00 0 S +Rule Zion 2037 only - Sep 13 2:00 0 S +Zone Asia/Jerusalem 2:20:56 - LMT 1880 + 2:20:40 - JMT 1918 # Jerusalem Mean Time? + 2:00 Zion I%sT +Rule Japan 1948 only - May Sun>=1 2:00 1:00 D +Rule Japan 1948 1951 - Sep Sat>=8 2:00 0 S +Rule Japan 1949 only - Apr Sun>=1 2:00 1:00 D +Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D +Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u + 9:00 - JST 1896 + 9:00 - CJT 1938 + 9:00 Japan J%sT +Rule Jordan 1973 only - Jun 6 0:00 1:00 S +Rule Jordan 1973 1975 - Oct 1 0:00 0 - +Rule Jordan 1974 1977 - May 1 0:00 1:00 S +Rule Jordan 1976 only - Nov 1 0:00 0 - +Rule Jordan 1977 only - Oct 1 0:00 0 - +Rule Jordan 1978 only - Apr 30 0:00 1:00 S +Rule Jordan 1978 only - Sep 30 0:00 0 - +Rule Jordan 1985 only - Apr 1 0:00 1:00 S +Rule Jordan 1985 only - Oct 1 0:00 0 - +Rule Jordan 1986 1988 - Apr Fri>=1 0:00 1:00 S +Rule Jordan 1986 1990 - Oct Fri>=1 0:00 0 - +Rule Jordan 1989 only - May 8 0:00 1:00 S +Rule Jordan 1990 only - Apr 27 0:00 1:00 S +Rule Jordan 1991 only - Apr 17 0:00 1:00 S +Rule Jordan 1991 only - Sep 27 0:00 0 - +Rule Jordan 1992 only - Apr 10 0:00 1:00 S +Rule Jordan 1992 1993 - Oct Fri>=1 0:00 0 - +Rule Jordan 1993 1998 - Apr Fri>=1 0:00 1:00 S +Rule Jordan 1994 only - Sep Fri>=15 0:00 0 - +Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 - +Rule Jordan 1999 only - Jul 1 0:00s 1:00 S +Rule Jordan 1999 2002 - Sep lastFri 0:00s 0 - +Rule Jordan 2000 2001 - Mar lastThu 0:00s 1:00 S +Rule Jordan 2002 max - Mar lastThu 24:00 1:00 S +Rule Jordan 2003 only - Oct 24 0:00s 0 - +Rule Jordan 2004 only - Oct 15 0:00s 0 - +Rule Jordan 2005 only - Sep lastFri 0:00s 0 - +Rule Jordan 2006 max - Oct lastFri 0:00s 0 - +Zone Asia/Amman 2:23:44 - LMT 1931 + 2:00 Jordan EE%sT +Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata + 5:00 - ALMT 1930 Jun 21 # Alma-Ata Time + 6:00 RussiaAsia ALM%sT 1991 + 6:00 - ALMT 1992 + 6:00 RussiaAsia ALM%sT 2005 Mar 15 + 6:00 - ALMT +Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2 + 4:00 - KIZT 1930 Jun 21 # Kizilorda Time + 5:00 - KIZT 1981 Apr 1 + 5:00 1:00 KIZST 1981 Oct 1 + 6:00 - KIZT 1982 Apr 1 + 5:00 RussiaAsia KIZ%sT 1991 + 5:00 - KIZT 1991 Dec 16 # independence + 5:00 - QYZT 1992 Jan 19 2:00 + 6:00 RussiaAsia QYZ%sT 2005 Mar 15 + 6:00 - QYZT +Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2 + 4:00 - AKTT 1930 Jun 21 # Aktyubinsk Time + 5:00 - AKTT 1981 Apr 1 + 5:00 1:00 AKTST 1981 Oct 1 + 6:00 - AKTT 1982 Apr 1 + 5:00 RussiaAsia AKT%sT 1991 + 5:00 - AKTT 1991 Dec 16 # independence + 5:00 RussiaAsia AQT%sT 2005 Mar 15 # Aqtobe Time + 5:00 - AQTT +Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2 + 4:00 - FORT 1930 Jun 21 # Fort Shevchenko T + 5:00 - FORT 1963 + 5:00 - SHET 1981 Oct 1 # Shevchenko Time + 6:00 - SHET 1982 Apr 1 + 5:00 RussiaAsia SHE%sT 1991 + 5:00 - SHET 1991 Dec 16 # independence + 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time + 4:00 RussiaAsia AQT%sT 2005 Mar 15 + 5:00 - AQTT +Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk + 4:00 - URAT 1930 Jun 21 # Ural'sk time + 5:00 - URAT 1981 Apr 1 + 5:00 1:00 URAST 1981 Oct 1 + 6:00 - URAT 1982 Apr 1 + 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00 + 4:00 RussiaAsia URA%sT 1991 + 4:00 - URAT 1991 Dec 16 # independence + 4:00 RussiaAsia ORA%sT 2005 Mar 15 # Oral Time + 5:00 - ORAT +Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 S +Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 - +Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 S +Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 - +Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2 + 5:00 - FRUT 1930 Jun 21 # Frunze Time + 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s + 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence + 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time + 6:00 - KGT +Rule ROK 1960 only - May 15 0:00 1:00 D +Rule ROK 1960 only - Sep 13 0:00 0 S +Rule ROK 1987 1988 - May Sun>=8 0:00 1:00 D +Rule ROK 1987 1988 - Oct Sun>=8 0:00 0 S +Zone Asia/Seoul 8:27:52 - LMT 1890 + 8:30 - KST 1904 Dec + 9:00 - KST 1928 + 8:30 - KST 1932 + 9:00 - KST 1954 Mar 21 + 8:00 ROK K%sT 1961 Aug 10 + 8:30 - KST 1968 Oct + 9:00 ROK K%sT +Zone Asia/Pyongyang 8:23:00 - LMT 1890 + 8:30 - KST 1904 Dec + 9:00 - KST 1928 + 8:30 - KST 1932 + 9:00 - KST 1954 Mar 21 + 8:00 - KST 1961 Aug 10 + 9:00 - KST +Zone Asia/Kuwait 3:11:56 - LMT 1950 + 3:00 - AST +Zone Asia/Vientiane 6:50:24 - LMT 1906 Jun 9 # or Viangchan + 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? + 7:00 - ICT 1912 May + 8:00 - ICT 1931 May + 7:00 - ICT +Rule Lebanon 1920 only - Mar 28 0:00 1:00 S +Rule Lebanon 1920 only - Oct 25 0:00 0 - +Rule Lebanon 1921 only - Apr 3 0:00 1:00 S +Rule Lebanon 1921 only - Oct 3 0:00 0 - +Rule Lebanon 1922 only - Mar 26 0:00 1:00 S +Rule Lebanon 1922 only - Oct 8 0:00 0 - +Rule Lebanon 1923 only - Apr 22 0:00 1:00 S +Rule Lebanon 1923 only - Sep 16 0:00 0 - +Rule Lebanon 1957 1961 - May 1 0:00 1:00 S +Rule Lebanon 1957 1961 - Oct 1 0:00 0 - +Rule Lebanon 1972 only - Jun 22 0:00 1:00 S +Rule Lebanon 1972 1977 - Oct 1 0:00 0 - +Rule Lebanon 1973 1977 - May 1 0:00 1:00 S +Rule Lebanon 1978 only - Apr 30 0:00 1:00 S +Rule Lebanon 1978 only - Sep 30 0:00 0 - +Rule Lebanon 1984 1987 - May 1 0:00 1:00 S +Rule Lebanon 1984 1991 - Oct 16 0:00 0 - +Rule Lebanon 1988 only - Jun 1 0:00 1:00 S +Rule Lebanon 1989 only - May 10 0:00 1:00 S +Rule Lebanon 1990 1992 - May 1 0:00 1:00 S +Rule Lebanon 1992 only - Oct 4 0:00 0 - +Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S +Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 - +Rule Lebanon 1999 max - Oct lastSun 0:00 0 - +Zone Asia/Beirut 2:22:00 - LMT 1880 + 2:00 Lebanon EE%sT +Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 TS # one-Third Summer +Rule NBorneo 1935 1941 - Dec 14 0:00 0 - +Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1 + 6:55:25 - SMT 1905 Jun 1 # Singapore M.T. + 7:00 - MALT 1933 Jan 1 # Malaya Time + 7:00 0:20 MALST 1936 Jan 1 + 7:20 - MALT 1941 Sep 1 + 7:30 - MALT 1942 Feb 16 + 9:00 - JST 1945 Sep 12 + 7:30 - MALT 1982 Jan 1 + 8:00 - MYT # Malaysia Time +Zone Asia/Kuching 7:21:20 - LMT 1926 Mar + 7:30 - BORT 1933 # Borneo Time + 8:00 NBorneo BOR%sT 1942 Feb 16 + 9:00 - JST 1945 Sep 12 + 8:00 - BORT 1982 Jan 1 + 8:00 - MYT +Zone Indian/Maldives 4:54:00 - LMT 1880 # Male + 4:54:00 - MMT 1960 # Male Mean Time + 5:00 - MVT # Maldives Time +Rule Mongol 1983 1984 - Apr 1 0:00 1:00 S +Rule Mongol 1983 only - Oct 1 0:00 0 - +Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 S +Rule Mongol 1984 1998 - Sep lastSun 0:00 0 - +Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S +Rule Mongol 2001 2006 - Sep lastSat 2:00 0 - +Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S +Zone Asia/Hovd 6:06:36 - LMT 1905 Aug + 6:00 - HOVT 1978 # Hovd Time + 7:00 Mongol HOV%sT +Zone Asia/Ulaanbaatar 7:07:32 - LMT 1905 Aug + 7:00 - ULAT 1978 # Ulaanbaatar Time + 8:00 Mongol ULA%sT +Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug + 7:00 - ULAT 1978 + 8:00 - ULAT 1983 Apr + 9:00 Mongol CHO%sT 2008 Mar 31 # Choibalsan Time + 8:00 Mongol CHO%sT +Zone Asia/Kathmandu 5:41:16 - LMT 1920 + 5:30 - IST 1986 + 5:45 - NPT # Nepal Time +Zone Asia/Muscat 3:54:20 - LMT 1920 + 4:00 - GST +Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S +Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 - +Rule Pakistan 2008 only - Jun 1 0:00 1:00 S +Rule Pakistan 2008 only - Nov 1 0:00 0 - +Rule Pakistan 2009 only - Apr 15 0:00 1:00 S +Rule Pakistan 2009 only - Nov 1 0:00 0 - +Zone Asia/Karachi 4:28:12 - LMT 1907 + 5:30 - IST 1942 Sep + 5:30 1:00 IST 1945 Oct 15 + 5:30 - IST 1951 Sep 30 + 5:00 - KART 1971 Mar 26 # Karachi Time + 5:00 Pakistan PK%sT # Pakistan Time +Rule EgyptAsia 1957 only - May 10 0:00 1:00 S +Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 - +Rule EgyptAsia 1958 only - May 1 0:00 1:00 S +Rule EgyptAsia 1959 1967 - May 1 1:00 1:00 S +Rule EgyptAsia 1959 1965 - Sep 30 3:00 0 - +Rule EgyptAsia 1966 only - Oct 1 3:00 0 - +Rule Palestine 1999 2005 - Apr Fri>=15 0:00 1:00 S +Rule Palestine 1999 2003 - Oct Fri>=15 0:00 0 - +Rule Palestine 2004 only - Oct 1 1:00 0 - +Rule Palestine 2005 only - Oct 4 2:00 0 - +Rule Palestine 2006 2008 - Apr 1 0:00 1:00 S +Rule Palestine 2006 only - Sep 22 0:00 0 - +Rule Palestine 2007 only - Sep Thu>=8 2:00 0 - +Rule Palestine 2008 only - Aug lastFri 2:00 0 - +Rule Palestine 2009 only - Mar lastFri 0:00 1:00 S +Rule Palestine 2010 max - Mar lastSat 0:01 1:00 S +Rule Palestine 2009 max - Sep Fri>=1 2:00 0 - +Rule Palestine 2010 only - Aug 11 0:00 0 - +Zone Asia/Gaza 2:17:52 - LMT 1900 Oct + 2:00 Zion EET 1948 May 15 + 2:00 EgyptAsia EE%sT 1967 Jun 5 + 2:00 Zion I%sT 1996 + 2:00 Jordan EE%sT 1999 + 2:00 Palestine EE%sT +Rule Phil 1936 only - Nov 1 0:00 1:00 S +Rule Phil 1937 only - Feb 1 0:00 0 - +Rule Phil 1954 only - Apr 12 0:00 1:00 S +Rule Phil 1954 only - Jul 1 0:00 0 - +Rule Phil 1978 only - Mar 22 0:00 1:00 S +Rule Phil 1978 only - Sep 21 0:00 0 - +Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31 + 8:04:00 - LMT 1899 May 11 + 8:00 Phil PH%sT 1942 May + 9:00 - JST 1944 Nov + 8:00 Phil PH%sT +Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha + 4:00 - GST 1972 Jun + 3:00 - AST +Zone Asia/Riyadh 3:06:52 - LMT 1950 + 3:00 - AST +Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1 + 6:55:25 - SMT 1905 Jun 1 # Singapore M.T. + 7:00 - MALT 1933 Jan 1 # Malaya Time + 7:00 0:20 MALST 1936 Jan 1 + 7:20 - MALT 1941 Sep 1 + 7:30 - MALT 1942 Feb 16 + 9:00 - JST 1945 Sep 12 + 7:30 - MALT 1965 Aug 9 # independence + 7:30 - SGT 1982 Jan 1 # Singapore Time + 8:00 - SGT +Zone Asia/Colombo 5:19:24 - LMT 1880 + 5:19:32 - MMT 1906 # Moratuwa Mean Time + 5:30 - IST 1942 Jan 5 + 5:30 0:30 IHST 1942 Sep + 5:30 1:00 IST 1945 Oct 16 2:00 + 5:30 - IST 1996 May 25 0:00 + 6:30 - LKT 1996 Oct 26 0:30 + 6:00 - LKT 2006 Apr 15 0:30 + 5:30 - IST +Rule Syria 1920 1923 - Apr Sun>=15 2:00 1:00 S +Rule Syria 1920 1923 - Oct Sun>=1 2:00 0 - +Rule Syria 1962 only - Apr 29 2:00 1:00 S +Rule Syria 1962 only - Oct 1 2:00 0 - +Rule Syria 1963 1965 - May 1 2:00 1:00 S +Rule Syria 1963 only - Sep 30 2:00 0 - +Rule Syria 1964 only - Oct 1 2:00 0 - +Rule Syria 1965 only - Sep 30 2:00 0 - +Rule Syria 1966 only - Apr 24 2:00 1:00 S +Rule Syria 1966 1976 - Oct 1 2:00 0 - +Rule Syria 1967 1978 - May 1 2:00 1:00 S +Rule Syria 1977 1978 - Sep 1 2:00 0 - +Rule Syria 1983 1984 - Apr 9 2:00 1:00 S +Rule Syria 1983 1984 - Oct 1 2:00 0 - +Rule Syria 1986 only - Feb 16 2:00 1:00 S +Rule Syria 1986 only - Oct 9 2:00 0 - +Rule Syria 1987 only - Mar 1 2:00 1:00 S +Rule Syria 1987 1988 - Oct 31 2:00 0 - +Rule Syria 1988 only - Mar 15 2:00 1:00 S +Rule Syria 1989 only - Mar 31 2:00 1:00 S +Rule Syria 1989 only - Oct 1 2:00 0 - +Rule Syria 1990 only - Apr 1 2:00 1:00 S +Rule Syria 1990 only - Sep 30 2:00 0 - +Rule Syria 1991 only - Apr 1 0:00 1:00 S +Rule Syria 1991 1992 - Oct 1 0:00 0 - +Rule Syria 1992 only - Apr 8 0:00 1:00 S +Rule Syria 1993 only - Mar 26 0:00 1:00 S +Rule Syria 1993 only - Sep 25 0:00 0 - +Rule Syria 1994 1996 - Apr 1 0:00 1:00 S +Rule Syria 1994 2005 - Oct 1 0:00 0 - +Rule Syria 1997 1998 - Mar lastMon 0:00 1:00 S +Rule Syria 1999 2006 - Apr 1 0:00 1:00 S +Rule Syria 2006 only - Sep 22 0:00 0 - +Rule Syria 2007 only - Mar lastFri 0:00 1:00 S +Rule Syria 2007 only - Nov Fri>=1 0:00 0 - +Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S +Rule Syria 2008 only - Nov 1 0:00 0 - +Rule Syria 2009 only - Mar lastFri 0:00 1:00 S +Rule Syria 2010 max - Apr Fri>=1 0:00 1:00 S +Rule Syria 2009 max - Oct lastFri 0:00 0 - +Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq + 2:00 Syria EE%sT +Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2 + 5:00 - DUST 1930 Jun 21 # Dushanbe Time + 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s + 5:00 1:00 DUSST 1991 Sep 9 2:00s + 5:00 - TJT # Tajikistan Time +Zone Asia/Bangkok 6:42:04 - LMT 1880 + 6:42:04 - BMT 1920 Apr # Bangkok Mean Time + 7:00 - ICT +Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad + 4:00 - ASHT 1930 Jun 21 # Ashkhabad Time + 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00 + 4:00 RussiaAsia ASH%sT 1991 Oct 27 # independence + 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00 + 5:00 - TMT +Zone Asia/Dubai 3:41:12 - LMT 1920 + 4:00 - GST +Zone Asia/Samarkand 4:27:12 - LMT 1924 May 2 + 4:00 - SAMT 1930 Jun 21 # Samarkand Time + 5:00 - SAMT 1981 Apr 1 + 5:00 1:00 SAMST 1981 Oct 1 + 6:00 - TAST 1982 Apr 1 # Tashkent Time + 5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence + 5:00 RussiaAsia UZ%sT 1992 + 5:00 - UZT +Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2 + 5:00 - TAST 1930 Jun 21 # Tashkent Time + 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00 + 5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence + 5:00 RussiaAsia UZ%sT 1992 + 5:00 - UZT +Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jun 9 + 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT? + 7:00 - ICT 1912 May + 8:00 - ICT 1931 May + 7:00 - ICT +Zone Asia/Aden 3:00:48 - LMT 1950 + 3:00 - AST diff --git a/examples/tz/australasia b/examples/tz/australasia new file mode 100644 index 0000000..425f163 --- /dev/null +++ b/examples/tz/australasia @@ -0,0 +1,304 @@ +Rule Aus 1917 only - Jan 1 0:01 1:00 - +Rule Aus 1917 only - Mar 25 2:00 0 - +Rule Aus 1942 only - Jan 1 2:00 1:00 - +Rule Aus 1942 only - Mar 29 2:00 0 - +Rule Aus 1942 only - Sep 27 2:00 1:00 - +Rule Aus 1943 1944 - Mar lastSun 2:00 0 - +Rule Aus 1943 only - Oct 3 2:00 1:00 - +Zone Australia/Darwin 8:43:20 - LMT 1895 Feb + 9:00 - CST 1899 May + 9:30 Aus CST +Rule AW 1974 only - Oct lastSun 2:00s 1:00 - +Rule AW 1975 only - Mar Sun>=1 2:00s 0 - +Rule AW 1983 only - Oct lastSun 2:00s 1:00 - +Rule AW 1984 only - Mar Sun>=1 2:00s 0 - +Rule AW 1991 only - Nov 17 2:00s 1:00 - +Rule AW 1992 only - Mar Sun>=1 2:00s 0 - +Rule AW 2006 only - Dec 3 2:00s 1:00 - +Rule AW 2007 2009 - Mar lastSun 2:00s 0 - +Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 - +Zone Australia/Perth 7:43:24 - LMT 1895 Dec + 8:00 Aus WST 1943 Jul + 8:00 AW WST +Zone Australia/Eucla 8:35:28 - LMT 1895 Dec + 8:45 Aus CWST 1943 Jul + 8:45 AW CWST +Rule AQ 1971 only - Oct lastSun 2:00s 1:00 - +Rule AQ 1972 only - Feb lastSun 2:00s 0 - +Rule AQ 1989 1991 - Oct lastSun 2:00s 1:00 - +Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 - +Rule Holiday 1992 1993 - Oct lastSun 2:00s 1:00 - +Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 - +Zone Australia/Brisbane 10:12:08 - LMT 1895 + 10:00 Aus EST 1971 + 10:00 AQ EST +Zone Australia/Lindeman 9:55:56 - LMT 1895 + 10:00 Aus EST 1971 + 10:00 AQ EST 1992 Jul + 10:00 Holiday EST +Rule AS 1971 1985 - Oct lastSun 2:00s 1:00 - +Rule AS 1986 only - Oct 19 2:00s 1:00 - +Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 - +Rule AS 1972 only - Feb 27 2:00s 0 - +Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 - +Rule AS 1986 1990 - Mar Sun>=15 2:00s 0 - +Rule AS 1991 only - Mar 3 2:00s 0 - +Rule AS 1992 only - Mar 22 2:00s 0 - +Rule AS 1993 only - Mar 7 2:00s 0 - +Rule AS 1994 only - Mar 20 2:00s 0 - +Rule AS 1995 2005 - Mar lastSun 2:00s 0 - +Rule AS 2006 only - Apr 2 2:00s 0 - +Rule AS 2007 only - Mar lastSun 2:00s 0 - +Rule AS 2008 max - Apr Sun>=1 2:00s 0 - +Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 - +Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb + 9:00 - CST 1899 May + 9:30 Aus CST 1971 + 9:30 AS CST +Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 - +Rule AT 1968 only - Mar lastSun 2:00s 0 - +Rule AT 1968 1985 - Oct lastSun 2:00s 1:00 - +Rule AT 1969 1971 - Mar Sun>=8 2:00s 0 - +Rule AT 1972 only - Feb lastSun 2:00s 0 - +Rule AT 1973 1981 - Mar Sun>=1 2:00s 0 - +Rule AT 1982 1983 - Mar lastSun 2:00s 0 - +Rule AT 1984 1986 - Mar Sun>=1 2:00s 0 - +Rule AT 1986 only - Oct Sun>=15 2:00s 1:00 - +Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 - +Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 - +Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 - +Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 - +Rule AT 1991 2005 - Mar lastSun 2:00s 0 - +Rule AT 2000 only - Aug lastSun 2:00s 1:00 - +Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 - +Rule AT 2006 only - Apr Sun>=1 2:00s 0 - +Rule AT 2007 only - Mar lastSun 2:00s 0 - +Rule AT 2008 max - Apr Sun>=1 2:00s 0 - +Zone Australia/Hobart 9:49:16 - LMT 1895 Sep + 10:00 - EST 1916 Oct 1 2:00 + 10:00 1:00 EST 1917 Feb + 10:00 Aus EST 1967 + 10:00 AT EST +Zone Australia/Currie 9:35:28 - LMT 1895 Sep + 10:00 - EST 1916 Oct 1 2:00 + 10:00 1:00 EST 1917 Feb + 10:00 Aus EST 1971 Jul + 10:00 AT EST +Rule AV 1971 1985 - Oct lastSun 2:00s 1:00 - +Rule AV 1972 only - Feb lastSun 2:00s 0 - +Rule AV 1973 1985 - Mar Sun>=1 2:00s 0 - +Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 - +Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 - +Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 - +Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 - +Rule AV 1995 2005 - Mar lastSun 2:00s 0 - +Rule AV 2000 only - Aug lastSun 2:00s 1:00 - +Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 - +Rule AV 2006 only - Apr Sun>=1 2:00s 0 - +Rule AV 2007 only - Mar lastSun 2:00s 0 - +Rule AV 2008 max - Apr Sun>=1 2:00s 0 - +Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 - +Zone Australia/Melbourne 9:39:52 - LMT 1895 Feb + 10:00 Aus EST 1971 + 10:00 AV EST +Rule AN 1971 1985 - Oct lastSun 2:00s 1:00 - +Rule AN 1972 only - Feb 27 2:00s 0 - +Rule AN 1973 1981 - Mar Sun>=1 2:00s 0 - +Rule AN 1982 only - Apr Sun>=1 2:00s 0 - +Rule AN 1983 1985 - Mar Sun>=1 2:00s 0 - +Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 - +Rule AN 1986 only - Oct 19 2:00s 1:00 - +Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 - +Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 - +Rule AN 1996 2005 - Mar lastSun 2:00s 0 - +Rule AN 2000 only - Aug lastSun 2:00s 1:00 - +Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 - +Rule AN 2006 only - Apr Sun>=1 2:00s 0 - +Rule AN 2007 only - Mar lastSun 2:00s 0 - +Rule AN 2008 max - Apr Sun>=1 2:00s 0 - +Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 - +Zone Australia/Sydney 10:04:52 - LMT 1895 Feb + 10:00 Aus EST 1971 + 10:00 AN EST +Zone Australia/Broken_Hill 9:25:48 - LMT 1895 Feb + 10:00 - EST 1896 Aug 23 + 9:00 - CST 1899 May + 9:30 Aus CST 1971 + 9:30 AN CST 2000 + 9:30 AS CST +Rule LH 1981 1984 - Oct lastSun 2:00 1:00 - +Rule LH 1982 1985 - Mar Sun>=1 2:00 0 - +Rule LH 1985 only - Oct lastSun 2:00 0:30 - +Rule LH 1986 1989 - Mar Sun>=15 2:00 0 - +Rule LH 1986 only - Oct 19 2:00 0:30 - +Rule LH 1987 1999 - Oct lastSun 2:00 0:30 - +Rule LH 1990 1995 - Mar Sun>=1 2:00 0 - +Rule LH 1996 2005 - Mar lastSun 2:00 0 - +Rule LH 2000 only - Aug lastSun 2:00 0:30 - +Rule LH 2001 2007 - Oct lastSun 2:00 0:30 - +Rule LH 2006 only - Apr Sun>=1 2:00 0 - +Rule LH 2007 only - Mar lastSun 2:00 0 - +Rule LH 2008 max - Apr Sun>=1 2:00 0 - +Rule LH 2008 max - Oct Sun>=1 2:00 0:30 - +Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb + 10:00 - EST 1981 Mar + 10:30 LH LHST +Zone Indian/Christmas 7:02:52 - LMT 1895 Feb + 7:00 - CXT # Christmas Island Time +Rule Cook 1978 only - Nov 12 0:00 0:30 HS +Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 - +Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS +Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua + -10:30 - CKT 1978 Nov 12 # Cook Is Time + -10:00 Cook CK%sT +Zone Indian/Cocos 6:27:40 - LMT 1900 + 6:30 - CCT # Cocos Islands Time +Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S +Rule Fiji 1999 2000 - Feb lastSun 3:00 0 - +Rule Fiji 2009 only - Nov 29 2:00 1:00 S +Rule Fiji 2010 only - Mar lastSun 3:00 0 - +Rule Fiji 2010 only - Oct 24 2:00 1:00 S +Rule Fiji 2011 only - Mar Sun>=1 3:00 0 - +Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva + 12:00 Fiji FJ%sT # Fiji Time +Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea + -9:00 - GAMT # Gambier Time +Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct + -9:30 - MART # Marquesas Time +Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete + -10:00 - TAHT # Tahiti Time +Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31 + 9:39:00 - LMT 1901 # Agana + 10:00 - GST 2000 Dec 23 # Guam + 10:00 - ChST # Chamorro Standard Time +Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki + 12:00 - GILT # Gilbert Is Time +Zone Pacific/Enderbury -11:24:20 - LMT 1901 + -12:00 - PHOT 1979 Oct # Phoenix Is Time + -11:00 - PHOT 1995 + 13:00 - PHOT +Zone Pacific/Kiritimati -10:29:20 - LMT 1901 + -10:40 - LINT 1979 Oct # Line Is Time + -10:00 - LINT 1995 + 14:00 - LINT +Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31 + 9:43:00 - LMT 1901 + 9:00 - MPT 1969 Oct # N Mariana Is Time + 10:00 - MPT 2000 Dec 23 + 10:00 - ChST # Chamorro Standard Time +Zone Pacific/Majuro 11:24:48 - LMT 1901 + 11:00 - MHT 1969 Oct # Marshall Islands Time + 12:00 - MHT +Zone Pacific/Kwajalein 11:09:20 - LMT 1901 + 11:00 - MHT 1969 Oct + -12:00 - KWAT 1993 Aug 20 # Kwajalein Time + 12:00 - MHT +Zone Pacific/Chuuk 10:07:08 - LMT 1901 + 10:00 - CHUT # Chuuk Time +Zone Pacific/Pohnpei 10:32:52 - LMT 1901 # Kolonia + 11:00 - PONT # Pohnpei Time +Zone Pacific/Kosrae 10:51:56 - LMT 1901 + 11:00 - KOST 1969 Oct # Kosrae Time + 12:00 - KOST 1999 + 11:00 - KOST +Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe + 11:30 - NRT 1942 Mar 15 # Nauru Time + 9:00 - JST 1944 Aug 15 + 11:30 - NRT 1979 May + 12:00 - NRT +Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 S +Rule NC 1978 1979 - Feb 27 0:00 0 - +Rule NC 1996 only - Dec 1 2:00s 1:00 S +Rule NC 1997 only - Mar 2 2:00s 0 - +Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13 + 11:00 NC NC%sT +Rule NZ 1927 only - Nov 6 2:00 1:00 S +Rule NZ 1928 only - Mar 4 2:00 0 M +Rule NZ 1928 1933 - Oct Sun>=8 2:00 0:30 S +Rule NZ 1929 1933 - Mar Sun>=15 2:00 0 M +Rule NZ 1934 1940 - Apr lastSun 2:00 0 M +Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S +Rule NZ 1946 only - Jan 1 0:00 0 S +Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D +Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D +Rule NZ 1975 only - Feb lastSun 2:00s 0 S +Rule Chatham 1975 only - Feb lastSun 2:45s 0 S +Rule NZ 1975 1988 - Oct lastSun 2:00s 1:00 D +Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 D +Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S +Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 S +Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D +Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 D +Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D +Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 D +Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S +Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 S +Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D +Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 D +Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S +Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 S +Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2 + 11:30 NZ NZ%sT 1946 Jan 1 + 12:00 NZ NZ%sT +Zone Pacific/Chatham 12:13:48 - LMT 1957 Jan 1 + 12:45 Chatham CHA%sT +Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi + -11:20 - NUT 1951 # Niue Time + -11:30 - NUT 1978 Oct 1 + -11:00 - NUT +Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston + 11:12 - NMT 1951 # Norfolk Mean Time + 11:30 - NFT # Norfolk Time +Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror + 9:00 - PWT # Palau Time +Zone Pacific/Port_Moresby 9:48:40 - LMT 1880 + 9:48:32 - PMMT 1895 # Port Moresby Mean Time + 10:00 - PGT # Papua New Guinea Time +Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown + -8:30 - PNT 1998 Apr 27 00:00 + -8:00 - PST # Pitcairn Standard Time +Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5 + -11:22:48 - LMT 1911 + -11:30 - SAMT 1950 # Samoa Time + -11:00 - NST 1967 Apr # N=Nome + -11:00 - BST 1983 Nov 30 # B=Bering + -11:00 - SST # S=Samoa +Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5 + -11:26:56 - LMT 1911 + -11:30 - SAMT 1950 # Samoa Time + -11:00 - WST 2010 Sep 26 + -11:00 1:00 WSDT 2011 Apr 2 4:00 + -11:00 - WST +Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara + 11:00 - SBT # Solomon Is Time +Zone Pacific/Fakaofo -11:24:56 - LMT 1901 + -10:00 - TKT # Tokelau Time +Rule Tonga 1999 only - Oct 7 2:00s 1:00 S +Rule Tonga 2000 only - Mar 19 2:00s 0 - +Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 S +Rule Tonga 2001 2002 - Jan lastSun 2:00 0 - +Zone Pacific/Tongatapu 12:19:20 - LMT 1901 + 12:20 - TOT 1941 # Tonga Time + 13:00 - TOT 1999 + 13:00 Tonga TO%sT +Zone Pacific/Funafuti 11:56:52 - LMT 1901 + 12:00 - TVT # Tuvalu Time +Zone Pacific/Johnston -10:00 - HST +Zone Pacific/Midway -11:49:28 - LMT 1901 + -11:00 - NST 1956 Jun 3 + -11:00 1:00 NDT 1956 Sep 2 + -11:00 - NST 1967 Apr # N=Nome + -11:00 - BST 1983 Nov 30 # B=Bering + -11:00 - SST # S=Samoa +Zone Pacific/Wake 11:06:28 - LMT 1901 + 12:00 - WAKT # Wake Time +Rule Vanuatu 1983 only - Sep 25 0:00 1:00 S +Rule Vanuatu 1984 1991 - Mar Sun>=23 0:00 0 - +Rule Vanuatu 1984 only - Oct 23 0:00 1:00 S +Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 S +Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 - +Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S +Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila + 11:00 Vanuatu VU%sT # Vanuatu Time +Zone Pacific/Wallis 12:15:20 - LMT 1901 + 12:00 - WFT # Wallis & Futuna Time diff --git a/examples/tz/backward b/examples/tz/backward new file mode 100644 index 0000000..a02de1b --- /dev/null +++ b/examples/tz/backward @@ -0,0 +1,110 @@ +Link Africa/Asmara Africa/Asmera +Link Africa/Bamako Africa/Timbuktu +Link America/Argentina/Catamarca America/Argentina/ComodRivadavia +Link America/Adak America/Atka +Link America/Argentina/Buenos_Aires America/Buenos_Aires +Link America/Argentina/Catamarca America/Catamarca +Link America/Atikokan America/Coral_Harbour +Link America/Argentina/Cordoba America/Cordoba +Link America/Tijuana America/Ensenada +Link America/Indiana/Indianapolis America/Fort_Wayne +Link America/Indiana/Indianapolis America/Indianapolis +Link America/Argentina/Jujuy America/Jujuy +Link America/Indiana/Knox America/Knox_IN +Link America/Kentucky/Louisville America/Louisville +Link America/Argentina/Mendoza America/Mendoza +Link America/Rio_Branco America/Porto_Acre +Link America/Argentina/Cordoba America/Rosario +Link America/St_Thomas America/Virgin +Link Asia/Ashgabat Asia/Ashkhabad +Link Asia/Chongqing Asia/Chungking +Link Asia/Dhaka Asia/Dacca +Link Asia/Kathmandu Asia/Katmandu +Link Asia/Kolkata Asia/Calcutta +Link Asia/Macau Asia/Macao +Link Asia/Jerusalem Asia/Tel_Aviv +Link Asia/Ho_Chi_Minh Asia/Saigon +Link Asia/Thimphu Asia/Thimbu +Link Asia/Makassar Asia/Ujung_Pandang +Link Asia/Ulaanbaatar Asia/Ulan_Bator +Link Atlantic/Faroe Atlantic/Faeroe +Link Europe/Oslo Atlantic/Jan_Mayen +Link Australia/Sydney Australia/ACT +Link Australia/Sydney Australia/Canberra +Link Australia/Lord_Howe Australia/LHI +Link Australia/Sydney Australia/NSW +Link Australia/Darwin Australia/North +Link Australia/Brisbane Australia/Queensland +Link Australia/Adelaide Australia/South +Link Australia/Hobart Australia/Tasmania +Link Australia/Melbourne Australia/Victoria +Link Australia/Perth Australia/West +Link Australia/Broken_Hill Australia/Yancowinna +Link America/Rio_Branco Brazil/Acre +Link America/Noronha Brazil/DeNoronha +Link America/Sao_Paulo Brazil/East +Link America/Manaus Brazil/West +Link America/Halifax Canada/Atlantic +Link America/Winnipeg Canada/Central +Link America/Regina Canada/East-Saskatchewan +Link America/Toronto Canada/Eastern +Link America/Edmonton Canada/Mountain +Link America/St_Johns Canada/Newfoundland +Link America/Vancouver Canada/Pacific +Link America/Regina Canada/Saskatchewan +Link America/Whitehorse Canada/Yukon +Link America/Santiago Chile/Continental +Link Pacific/Easter Chile/EasterIsland +Link America/Havana Cuba +Link Africa/Cairo Egypt +Link Europe/Dublin Eire +Link Europe/London Europe/Belfast +Link Europe/Chisinau Europe/Tiraspol +Link Europe/London GB +Link Europe/London GB-Eire +Link Etc/GMT GMT+0 +Link Etc/GMT GMT-0 +Link Etc/GMT GMT0 +Link Etc/GMT Greenwich +Link Asia/Hong_Kong Hongkong +Link Atlantic/Reykjavik Iceland +Link Asia/Tehran Iran +Link Asia/Jerusalem Israel +Link America/Jamaica Jamaica +Link Asia/Tokyo Japan +Link Pacific/Kwajalein Kwajalein +Link Africa/Tripoli Libya +Link America/Tijuana Mexico/BajaNorte +Link America/Mazatlan Mexico/BajaSur +Link America/Mexico_City Mexico/General +Link Pacific/Auckland NZ +Link Pacific/Chatham NZ-CHAT +Link America/Denver Navajo +Link Asia/Shanghai PRC +Link Pacific/Pago_Pago Pacific/Samoa +Link Pacific/Chuuk Pacific/Yap +Link Pacific/Chuuk Pacific/Truk +Link Pacific/Pohnpei Pacific/Ponape +Link Europe/Warsaw Poland +Link Europe/Lisbon Portugal +Link Asia/Taipei ROC +Link Asia/Seoul ROK +Link Asia/Singapore Singapore +Link Europe/Istanbul Turkey +Link Etc/UCT UCT +Link America/Anchorage US/Alaska +Link America/Adak US/Aleutian +Link America/Phoenix US/Arizona +Link America/Chicago US/Central +Link America/Indiana/Indianapolis US/East-Indiana +Link America/New_York US/Eastern +Link Pacific/Honolulu US/Hawaii +Link America/Indiana/Knox US/Indiana-Starke +Link America/Detroit US/Michigan +Link America/Denver US/Mountain +Link America/Los_Angeles US/Pacific +Link Pacific/Pago_Pago US/Samoa +Link Etc/UTC UTC +Link Etc/UTC Universal +Link Europe/Moscow W-SU +Link Etc/UTC Zulu diff --git a/examples/tz/etcetera b/examples/tz/etcetera new file mode 100644 index 0000000..b459c36 --- /dev/null +++ b/examples/tz/etcetera @@ -0,0 +1,36 @@ +Zone Etc/GMT 0 - GMT +Zone Etc/UTC 0 - UTC +Zone Etc/UCT 0 - UCT +Link Etc/GMT GMT +Link Etc/UTC Etc/Universal +Link Etc/UTC Etc/Zulu +Link Etc/GMT Etc/Greenwich +Link Etc/GMT Etc/GMT-0 +Link Etc/GMT Etc/GMT+0 +Link Etc/GMT Etc/GMT0 +Zone Etc/GMT-14 14 - GMT-14 # 14 hours ahead of GMT +Zone Etc/GMT-13 13 - GMT-13 +Zone Etc/GMT-12 12 - GMT-12 +Zone Etc/GMT-11 11 - GMT-11 +Zone Etc/GMT-10 10 - GMT-10 +Zone Etc/GMT-9 9 - GMT-9 +Zone Etc/GMT-8 8 - GMT-8 +Zone Etc/GMT-7 7 - GMT-7 +Zone Etc/GMT-6 6 - GMT-6 +Zone Etc/GMT-5 5 - GMT-5 +Zone Etc/GMT-4 4 - GMT-4 +Zone Etc/GMT-3 3 - GMT-3 +Zone Etc/GMT-2 2 - GMT-2 +Zone Etc/GMT-1 1 - GMT-1 +Zone Etc/GMT+1 -1 - GMT+1 +Zone Etc/GMT+2 -2 - GMT+2 +Zone Etc/GMT+3 -3 - GMT+3 +Zone Etc/GMT+4 -4 - GMT+4 +Zone Etc/GMT+5 -5 - GMT+5 +Zone Etc/GMT+6 -6 - GMT+6 +Zone Etc/GMT+7 -7 - GMT+7 +Zone Etc/GMT+8 -8 - GMT+8 +Zone Etc/GMT+9 -9 - GMT+9 +Zone Etc/GMT+10 -10 - GMT+10 +Zone Etc/GMT+11 -11 - GMT+11 +Zone Etc/GMT+12 -12 - GMT+12 diff --git a/examples/tz/europe b/examples/tz/europe new file mode 100644 index 0000000..0984e26 --- /dev/null +++ b/examples/tz/europe @@ -0,0 +1,1058 @@ +Rule GB-Eire 1916 only - May 21 2:00s 1:00 BST +Rule GB-Eire 1916 only - Oct 1 2:00s 0 GMT +Rule GB-Eire 1917 only - Apr 8 2:00s 1:00 BST +Rule GB-Eire 1917 only - Sep 17 2:00s 0 GMT +Rule GB-Eire 1918 only - Mar 24 2:00s 1:00 BST +Rule GB-Eire 1918 only - Sep 30 2:00s 0 GMT +Rule GB-Eire 1919 only - Mar 30 2:00s 1:00 BST +Rule GB-Eire 1919 only - Sep 29 2:00s 0 GMT +Rule GB-Eire 1920 only - Mar 28 2:00s 1:00 BST +Rule GB-Eire 1920 only - Oct 25 2:00s 0 GMT +Rule GB-Eire 1921 only - Apr 3 2:00s 1:00 BST +Rule GB-Eire 1921 only - Oct 3 2:00s 0 GMT +Rule GB-Eire 1922 only - Mar 26 2:00s 1:00 BST +Rule GB-Eire 1922 only - Oct 8 2:00s 0 GMT +Rule GB-Eire 1923 only - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1923 1924 - Sep Sun>=16 2:00s 0 GMT +Rule GB-Eire 1924 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1925 1926 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1925 1938 - Oct Sun>=2 2:00s 0 GMT +Rule GB-Eire 1927 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1928 1929 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1930 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1931 1932 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1933 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1934 only - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1935 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1936 1937 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1938 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1939 only - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1939 only - Nov Sun>=16 2:00s 0 GMT +Rule GB-Eire 1940 only - Feb Sun>=23 2:00s 1:00 BST +Rule GB-Eire 1941 only - May Sun>=2 1:00s 2:00 BDST +Rule GB-Eire 1941 1943 - Aug Sun>=9 1:00s 1:00 BST +Rule GB-Eire 1942 1944 - Apr Sun>=2 1:00s 2:00 BDST +Rule GB-Eire 1944 only - Sep Sun>=16 1:00s 1:00 BST +Rule GB-Eire 1945 only - Apr Mon>=2 1:00s 2:00 BDST +Rule GB-Eire 1945 only - Jul Sun>=9 1:00s 1:00 BST +Rule GB-Eire 1945 1946 - Oct Sun>=2 2:00s 0 GMT +Rule GB-Eire 1946 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1947 only - Mar 16 2:00s 1:00 BST +Rule GB-Eire 1947 only - Apr 13 1:00s 2:00 BDST +Rule GB-Eire 1947 only - Aug 10 1:00s 1:00 BST +Rule GB-Eire 1947 only - Nov 2 2:00s 0 GMT +Rule GB-Eire 1948 only - Mar 14 2:00s 1:00 BST +Rule GB-Eire 1948 only - Oct 31 2:00s 0 GMT +Rule GB-Eire 1949 only - Apr 3 2:00s 1:00 BST +Rule GB-Eire 1949 only - Oct 30 2:00s 0 GMT +Rule GB-Eire 1950 1952 - Apr Sun>=14 2:00s 1:00 BST +Rule GB-Eire 1950 1952 - Oct Sun>=21 2:00s 0 GMT +Rule GB-Eire 1953 only - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1953 1960 - Oct Sun>=2 2:00s 0 GMT +Rule GB-Eire 1954 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1955 1956 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1957 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1958 1959 - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1960 only - Apr Sun>=9 2:00s 1:00 BST +Rule GB-Eire 1961 1963 - Mar lastSun 2:00s 1:00 BST +Rule GB-Eire 1961 1968 - Oct Sun>=23 2:00s 0 GMT +Rule GB-Eire 1964 1967 - Mar Sun>=19 2:00s 1:00 BST +Rule GB-Eire 1968 only - Feb 18 2:00s 1:00 BST +Rule GB-Eire 1972 1980 - Mar Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1972 1980 - Oct Sun>=23 2:00s 0 GMT +Rule GB-Eire 1981 1995 - Mar lastSun 1:00u 1:00 BST +Rule GB-Eire 1981 1989 - Oct Sun>=23 1:00u 0 GMT +Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT +Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s + 0:00 GB-Eire %s 1968 Oct 27 + 1:00 - BST 1971 Oct 31 2:00u + 0:00 GB-Eire %s 1996 + 0:00 EU GMT/BST +Link Europe/London Europe/Jersey +Link Europe/London Europe/Guernsey +Link Europe/London Europe/Isle_of_Man +Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2 + -0:25:21 - DMT 1916 May 21 2:00 + -0:25:21 1:00 IST 1916 Oct 1 2:00s + 0:00 GB-Eire %s 1921 Dec 6 # independence + 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00 + 0:00 1:00 IST 1946 Oct 6 2:00 + 0:00 - GMT 1947 Mar 16 2:00 + 0:00 1:00 IST 1947 Nov 2 2:00 + 0:00 - GMT 1948 Apr 18 2:00 + 0:00 GB-Eire GMT/IST 1968 Oct 27 + 1:00 - IST 1971 Oct 31 2:00u + 0:00 GB-Eire GMT/IST 1996 + 0:00 EU GMT/IST +Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S +Rule EU 1977 only - Sep lastSun 1:00u 0 - +Rule EU 1978 only - Oct 1 1:00u 0 - +Rule EU 1979 1995 - Sep lastSun 1:00u 0 - +Rule EU 1981 max - Mar lastSun 1:00u 1:00 S +Rule EU 1996 max - Oct lastSun 1:00u 0 - +Rule W-Eur 1977 1980 - Apr Sun>=1 1:00s 1:00 S +Rule W-Eur 1977 only - Sep lastSun 1:00s 0 - +Rule W-Eur 1978 only - Oct 1 1:00s 0 - +Rule W-Eur 1979 1995 - Sep lastSun 1:00s 0 - +Rule W-Eur 1981 max - Mar lastSun 1:00s 1:00 S +Rule W-Eur 1996 max - Oct lastSun 1:00s 0 - +Rule C-Eur 1916 only - Apr 30 23:00 1:00 S +Rule C-Eur 1916 only - Oct 1 1:00 0 - +Rule C-Eur 1917 1918 - Apr Mon>=15 2:00s 1:00 S +Rule C-Eur 1917 1918 - Sep Mon>=15 2:00s 0 - +Rule C-Eur 1940 only - Apr 1 2:00s 1:00 S +Rule C-Eur 1942 only - Nov 2 2:00s 0 - +Rule C-Eur 1943 only - Mar 29 2:00s 1:00 S +Rule C-Eur 1943 only - Oct 4 2:00s 0 - +Rule C-Eur 1944 1945 - Apr Mon>=1 2:00s 1:00 S +Rule C-Eur 1944 only - Oct 2 2:00s 0 - +Rule C-Eur 1945 only - Sep 16 2:00s 0 - +Rule C-Eur 1977 1980 - Apr Sun>=1 2:00s 1:00 S +Rule C-Eur 1977 only - Sep lastSun 2:00s 0 - +Rule C-Eur 1978 only - Oct 1 2:00s 0 - +Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 - +Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S +Rule C-Eur 1996 max - Oct lastSun 2:00s 0 - +Rule E-Eur 1977 1980 - Apr Sun>=1 0:00 1:00 S +Rule E-Eur 1977 only - Sep lastSun 0:00 0 - +Rule E-Eur 1978 only - Oct 1 0:00 0 - +Rule E-Eur 1979 1995 - Sep lastSun 0:00 0 - +Rule E-Eur 1981 max - Mar lastSun 0:00 1:00 S +Rule E-Eur 1996 max - Oct lastSun 0:00 0 - +Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time +Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time +Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time +Rule Russia 1918 only - Sep 16 1:00 1:00 MST +Rule Russia 1919 only - May 31 23:00 2:00 MDST +Rule Russia 1919 only - Jul 1 2:00 1:00 S +Rule Russia 1919 only - Aug 16 0:00 0 - +Rule Russia 1921 only - Feb 14 23:00 1:00 S +Rule Russia 1921 only - Mar 20 23:00 2:00 M # Midsummer +Rule Russia 1921 only - Sep 1 0:00 1:00 S +Rule Russia 1921 only - Oct 1 0:00 0 - +Rule Russia 1981 1984 - Apr 1 0:00 1:00 S +Rule Russia 1981 1983 - Oct 1 0:00 0 - +Rule Russia 1984 1991 - Sep lastSun 2:00s 0 - +Rule Russia 1985 1991 - Mar lastSun 2:00s 1:00 S +Rule Russia 1992 only - Mar lastSat 23:00 1:00 S +Rule Russia 1992 only - Sep lastSat 23:00 0 - +Rule Russia 1993 max - Mar lastSun 2:00s 1:00 S +Rule Russia 1993 1995 - Sep lastSun 2:00s 0 - +Rule Russia 1996 max - Oct lastSun 2:00s 0 - +Zone WET 0:00 EU WE%sT +Zone CET 1:00 C-Eur CE%sT +Zone MET 1:00 C-Eur ME%sT +Zone EET 2:00 EU EE%sT +Rule Albania 1940 only - Jun 16 0:00 1:00 S +Rule Albania 1942 only - Nov 2 3:00 0 - +Rule Albania 1943 only - Mar 29 2:00 1:00 S +Rule Albania 1943 only - Apr 10 3:00 0 - +Rule Albania 1974 only - May 4 0:00 1:00 S +Rule Albania 1974 only - Oct 2 0:00 0 - +Rule Albania 1975 only - May 1 0:00 1:00 S +Rule Albania 1975 only - Oct 2 0:00 0 - +Rule Albania 1976 only - May 2 0:00 1:00 S +Rule Albania 1976 only - Oct 3 0:00 0 - +Rule Albania 1977 only - May 8 0:00 1:00 S +Rule Albania 1977 only - Oct 2 0:00 0 - +Rule Albania 1978 only - May 6 0:00 1:00 S +Rule Albania 1978 only - Oct 1 0:00 0 - +Rule Albania 1979 only - May 5 0:00 1:00 S +Rule Albania 1979 only - Sep 30 0:00 0 - +Rule Albania 1980 only - May 3 0:00 1:00 S +Rule Albania 1980 only - Oct 4 0:00 0 - +Rule Albania 1981 only - Apr 26 0:00 1:00 S +Rule Albania 1981 only - Sep 27 0:00 0 - +Rule Albania 1982 only - May 2 0:00 1:00 S +Rule Albania 1982 only - Oct 3 0:00 0 - +Rule Albania 1983 only - Apr 18 0:00 1:00 S +Rule Albania 1983 only - Oct 1 0:00 0 - +Rule Albania 1984 only - Apr 1 0:00 1:00 S +Zone Europe/Tirane 1:19:20 - LMT 1914 + 1:00 - CET 1940 Jun 16 + 1:00 Albania CE%sT 1984 Jul + 1:00 EU CE%sT +Zone Europe/Andorra 0:06:04 - LMT 1901 + 0:00 - WET 1946 Sep 30 + 1:00 - CET 1985 Mar 31 2:00 + 1:00 EU CE%sT +Rule Austria 1920 only - Apr 5 2:00s 1:00 S +Rule Austria 1920 only - Sep 13 2:00s 0 - +Rule Austria 1946 only - Apr 14 2:00s 1:00 S +Rule Austria 1946 1948 - Oct Sun>=1 2:00s 0 - +Rule Austria 1947 only - Apr 6 2:00s 1:00 S +Rule Austria 1948 only - Apr 18 2:00s 1:00 S +Rule Austria 1980 only - Apr 6 0:00 1:00 S +Rule Austria 1980 only - Sep 28 0:00 0 - +Zone Europe/Vienna 1:05:20 - LMT 1893 Apr + 1:00 C-Eur CE%sT 1920 + 1:00 Austria CE%sT 1940 Apr 1 2:00s + 1:00 C-Eur CE%sT 1945 Apr 2 2:00s + 1:00 1:00 CEST 1945 Apr 12 2:00s + 1:00 - CET 1946 + 1:00 Austria CE%sT 1981 + 1:00 EU CE%sT +Zone Europe/Minsk 1:50:16 - LMT 1880 + 1:50 - MMT 1924 May 2 # Minsk Mean Time + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Jun 28 + 1:00 C-Eur CE%sT 1944 Jul 3 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1991 Mar 31 2:00s + 2:00 1:00 EEST 1991 Sep 29 2:00s + 2:00 - EET 1992 Mar 29 0:00s + 2:00 1:00 EEST 1992 Sep 27 0:00s + 2:00 Russia EE%sT +Rule Belgium 1918 only - Mar 9 0:00s 1:00 S +Rule Belgium 1918 1919 - Oct Sat>=1 23:00s 0 - +Rule Belgium 1919 only - Mar 1 23:00s 1:00 S +Rule Belgium 1920 only - Feb 14 23:00s 1:00 S +Rule Belgium 1920 only - Oct 23 23:00s 0 - +Rule Belgium 1921 only - Mar 14 23:00s 1:00 S +Rule Belgium 1921 only - Oct 25 23:00s 0 - +Rule Belgium 1922 only - Mar 25 23:00s 1:00 S +Rule Belgium 1922 1927 - Oct Sat>=1 23:00s 0 - +Rule Belgium 1923 only - Apr 21 23:00s 1:00 S +Rule Belgium 1924 only - Mar 29 23:00s 1:00 S +Rule Belgium 1925 only - Apr 4 23:00s 1:00 S +Rule Belgium 1926 only - Apr 17 23:00s 1:00 S +Rule Belgium 1927 only - Apr 9 23:00s 1:00 S +Rule Belgium 1928 only - Apr 14 23:00s 1:00 S +Rule Belgium 1928 1938 - Oct Sun>=2 2:00s 0 - +Rule Belgium 1929 only - Apr 21 2:00s 1:00 S +Rule Belgium 1930 only - Apr 13 2:00s 1:00 S +Rule Belgium 1931 only - Apr 19 2:00s 1:00 S +Rule Belgium 1932 only - Apr 3 2:00s 1:00 S +Rule Belgium 1933 only - Mar 26 2:00s 1:00 S +Rule Belgium 1934 only - Apr 8 2:00s 1:00 S +Rule Belgium 1935 only - Mar 31 2:00s 1:00 S +Rule Belgium 1936 only - Apr 19 2:00s 1:00 S +Rule Belgium 1937 only - Apr 4 2:00s 1:00 S +Rule Belgium 1938 only - Mar 27 2:00s 1:00 S +Rule Belgium 1939 only - Apr 16 2:00s 1:00 S +Rule Belgium 1939 only - Nov 19 2:00s 0 - +Rule Belgium 1940 only - Feb 25 2:00s 1:00 S +Rule Belgium 1944 only - Sep 17 2:00s 0 - +Rule Belgium 1945 only - Apr 2 2:00s 1:00 S +Rule Belgium 1945 only - Sep 16 2:00s 0 - +Rule Belgium 1946 only - May 19 2:00s 1:00 S +Rule Belgium 1946 only - Oct 7 2:00s 0 - +Zone Europe/Brussels 0:17:30 - LMT 1880 + 0:17:30 - BMT 1892 May 1 12:00 # Brussels MT + 0:00 - WET 1914 Nov 8 + 1:00 - CET 1916 May 1 0:00 + 1:00 C-Eur CE%sT 1918 Nov 11 11:00u + 0:00 Belgium WE%sT 1940 May 20 2:00s + 1:00 C-Eur CE%sT 1944 Sep 3 + 1:00 Belgium CE%sT 1977 + 1:00 EU CE%sT +Rule Bulg 1979 only - Mar 31 23:00 1:00 S +Rule Bulg 1979 only - Oct 1 1:00 0 - +Rule Bulg 1980 1982 - Apr Sat>=1 23:00 1:00 S +Rule Bulg 1980 only - Sep 29 1:00 0 - +Rule Bulg 1981 only - Sep 27 2:00 0 - +Zone Europe/Sofia 1:33:16 - LMT 1880 + 1:56:56 - IMT 1894 Nov 30 # Istanbul MT? + 2:00 - EET 1942 Nov 2 3:00 + 1:00 C-Eur CE%sT 1945 + 1:00 - CET 1945 Apr 2 3:00 + 2:00 - EET 1979 Mar 31 23:00 + 2:00 Bulg EE%sT 1982 Sep 26 2:00 + 2:00 C-Eur EE%sT 1991 + 2:00 E-Eur EE%sT 1997 + 2:00 EU EE%sT +Rule Czech 1945 only - Apr 8 2:00s 1:00 S +Rule Czech 1945 only - Nov 18 2:00s 0 - +Rule Czech 1946 only - May 6 2:00s 1:00 S +Rule Czech 1946 1949 - Oct Sun>=1 2:00s 0 - +Rule Czech 1947 only - Apr 20 2:00s 1:00 S +Rule Czech 1948 only - Apr 18 2:00s 1:00 S +Rule Czech 1949 only - Apr 9 2:00s 1:00 S +Zone Europe/Prague 0:57:44 - LMT 1850 + 0:57:44 - PMT 1891 Oct # Prague Mean Time + 1:00 C-Eur CE%sT 1944 Sep 17 2:00s + 1:00 Czech CE%sT 1979 + 1:00 EU CE%sT +Rule Denmark 1916 only - May 14 23:00 1:00 S +Rule Denmark 1916 only - Sep 30 23:00 0 - +Rule Denmark 1940 only - May 15 0:00 1:00 S +Rule Denmark 1945 only - Apr 2 2:00s 1:00 S +Rule Denmark 1945 only - Aug 15 2:00s 0 - +Rule Denmark 1946 only - May 1 2:00s 1:00 S +Rule Denmark 1946 only - Sep 1 2:00s 0 - +Rule Denmark 1947 only - May 4 2:00s 1:00 S +Rule Denmark 1947 only - Aug 10 2:00s 0 - +Rule Denmark 1948 only - May 9 2:00s 1:00 S +Rule Denmark 1948 only - Aug 8 2:00s 0 - +Zone Europe/Copenhagen 0:50:20 - LMT 1890 + 0:50:20 - CMT 1894 Jan 1 # Copenhagen MT + 1:00 Denmark CE%sT 1942 Nov 2 2:00s + 1:00 C-Eur CE%sT 1945 Apr 2 2:00 + 1:00 Denmark CE%sT 1980 + 1:00 EU CE%sT +Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Torshavn + 0:00 - WET 1981 + 0:00 EU WE%sT +Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D +Rule Thule 1991 1992 - Sep lastSun 2:00 0 S +Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D +Rule Thule 1993 2006 - Oct lastSun 2:00 0 S +Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D +Rule Thule 2007 max - Nov Sun>=1 2:00 0 S +Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28 + -3:00 - WGT 1980 Apr 6 2:00 + -3:00 EU WG%sT 1996 + 0:00 - GMT +Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit + -2:00 - CGT 1980 Apr 6 2:00 + -2:00 C-Eur CG%sT 1981 Mar 29 + -1:00 EU EG%sT +Zone America/Godthab -3:26:56 - LMT 1916 Jul 28 # Nuuk + -3:00 - WGT 1980 Apr 6 2:00 + -3:00 EU WG%sT +Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base + -4:00 Thule A%sT +Zone Europe/Tallinn 1:39:00 - LMT 1880 + 1:39:00 - TMT 1918 Feb # Tallinn Mean Time + 1:00 C-Eur CE%sT 1919 Jul + 1:39:00 - TMT 1921 May + 2:00 - EET 1940 Aug 6 + 3:00 - MSK 1941 Sep 15 + 1:00 C-Eur CE%sT 1944 Sep 22 + 3:00 Russia MSK/MSD 1989 Mar 26 2:00s + 2:00 1:00 EEST 1989 Sep 24 2:00s + 2:00 C-Eur EE%sT 1998 Sep 22 + 2:00 EU EE%sT 1999 Nov 1 + 2:00 - EET 2002 Feb 21 + 2:00 EU EE%sT +Rule Finland 1942 only - Apr 3 0:00 1:00 S +Rule Finland 1942 only - Oct 3 0:00 0 - +Rule Finland 1981 1982 - Mar lastSun 2:00 1:00 S +Rule Finland 1981 1982 - Sep lastSun 3:00 0 - +Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31 + 1:39:52 - HMT 1921 May # Helsinki Mean Time + 2:00 Finland EE%sT 1983 + 2:00 EU EE%sT +Link Europe/Helsinki Europe/Mariehamn +Rule France 1916 only - Jun 14 23:00s 1:00 S +Rule France 1916 1919 - Oct Sun>=1 23:00s 0 - +Rule France 1917 only - Mar 24 23:00s 1:00 S +Rule France 1918 only - Mar 9 23:00s 1:00 S +Rule France 1919 only - Mar 1 23:00s 1:00 S +Rule France 1920 only - Feb 14 23:00s 1:00 S +Rule France 1920 only - Oct 23 23:00s 0 - +Rule France 1921 only - Mar 14 23:00s 1:00 S +Rule France 1921 only - Oct 25 23:00s 0 - +Rule France 1922 only - Mar 25 23:00s 1:00 S +Rule France 1922 1938 - Oct Sat>=1 23:00s 0 - +Rule France 1923 only - May 26 23:00s 1:00 S +Rule France 1924 only - Mar 29 23:00s 1:00 S +Rule France 1925 only - Apr 4 23:00s 1:00 S +Rule France 1926 only - Apr 17 23:00s 1:00 S +Rule France 1927 only - Apr 9 23:00s 1:00 S +Rule France 1928 only - Apr 14 23:00s 1:00 S +Rule France 1929 only - Apr 20 23:00s 1:00 S +Rule France 1930 only - Apr 12 23:00s 1:00 S +Rule France 1931 only - Apr 18 23:00s 1:00 S +Rule France 1932 only - Apr 2 23:00s 1:00 S +Rule France 1933 only - Mar 25 23:00s 1:00 S +Rule France 1934 only - Apr 7 23:00s 1:00 S +Rule France 1935 only - Mar 30 23:00s 1:00 S +Rule France 1936 only - Apr 18 23:00s 1:00 S +Rule France 1937 only - Apr 3 23:00s 1:00 S +Rule France 1938 only - Mar 26 23:00s 1:00 S +Rule France 1939 only - Apr 15 23:00s 1:00 S +Rule France 1939 only - Nov 18 23:00s 0 - +Rule France 1940 only - Feb 25 2:00 1:00 S +Rule France 1941 only - May 5 0:00 2:00 M # Midsummer +Rule France 1941 only - Oct 6 0:00 1:00 S +Rule France 1942 only - Mar 9 0:00 2:00 M +Rule France 1942 only - Nov 2 3:00 1:00 S +Rule France 1943 only - Mar 29 2:00 2:00 M +Rule France 1943 only - Oct 4 3:00 1:00 S +Rule France 1944 only - Apr 3 2:00 2:00 M +Rule France 1944 only - Oct 8 1:00 1:00 S +Rule France 1945 only - Apr 2 2:00 2:00 M +Rule France 1945 only - Sep 16 3:00 0 - +Rule France 1976 only - Mar 28 1:00 1:00 S +Rule France 1976 only - Sep 26 1:00 0 - +Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01 + 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT + 0:00 France WE%sT 1940 Jun 14 23:00 + 1:00 C-Eur CE%sT 1944 Aug 25 + 0:00 France WE%sT 1945 Sep 16 3:00 + 1:00 France CE%sT 1977 + 1:00 EU CE%sT +Rule Germany 1946 only - Apr 14 2:00s 1:00 S +Rule Germany 1946 only - Oct 7 2:00s 0 - +Rule Germany 1947 1949 - Oct Sun>=1 2:00s 0 - +Rule Germany 1947 only - Apr 6 3:00s 1:00 S +Rule Germany 1947 only - May 11 2:00s 2:00 M +Rule Germany 1947 only - Jun 29 3:00 1:00 S +Rule Germany 1948 only - Apr 18 2:00s 1:00 S +Rule Germany 1949 only - Apr 10 2:00s 1:00 S +Rule SovietZone 1945 only - May 24 2:00 2:00 M # Midsummer +Rule SovietZone 1945 only - Sep 24 3:00 1:00 S +Rule SovietZone 1945 only - Nov 18 2:00s 0 - +Zone Europe/Berlin 0:53:28 - LMT 1893 Apr + 1:00 C-Eur CE%sT 1945 May 24 2:00 + 1:00 SovietZone CE%sT 1946 + 1:00 Germany CE%sT 1980 + 1:00 EU CE%sT +Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s + 0:00 GB-Eire %s 1957 Apr 14 2:00 + 1:00 - CET 1982 + 1:00 EU CE%sT +Rule Greece 1932 only - Jul 7 0:00 1:00 S +Rule Greece 1932 only - Sep 1 0:00 0 - +Rule Greece 1941 only - Apr 7 0:00 1:00 S +Rule Greece 1942 only - Nov 2 3:00 0 - +Rule Greece 1943 only - Mar 30 0:00 1:00 S +Rule Greece 1943 only - Oct 4 0:00 0 - +Rule Greece 1952 only - Jul 1 0:00 1:00 S +Rule Greece 1952 only - Nov 2 0:00 0 - +Rule Greece 1975 only - Apr 12 0:00s 1:00 S +Rule Greece 1975 only - Nov 26 0:00s 0 - +Rule Greece 1976 only - Apr 11 2:00s 1:00 S +Rule Greece 1976 only - Oct 10 2:00s 0 - +Rule Greece 1977 1978 - Apr Sun>=1 2:00s 1:00 S +Rule Greece 1977 only - Sep 26 2:00s 0 - +Rule Greece 1978 only - Sep 24 4:00 0 - +Rule Greece 1979 only - Apr 1 9:00 1:00 S +Rule Greece 1979 only - Sep 29 2:00 0 - +Rule Greece 1980 only - Apr 1 0:00 1:00 S +Rule Greece 1980 only - Sep 28 0:00 0 - +Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14 + 1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT + 2:00 Greece EE%sT 1941 Apr 30 + 1:00 Greece CE%sT 1944 Apr 4 + 2:00 Greece EE%sT 1981 + # Shanks & Pottenger say it switched to C-Eur in 1981; + # go with EU instead, since Greece joined it on Jan 1. + 2:00 EU EE%sT +Rule Hungary 1918 only - Apr 1 3:00 1:00 S +Rule Hungary 1918 only - Sep 29 3:00 0 - +Rule Hungary 1919 only - Apr 15 3:00 1:00 S +Rule Hungary 1919 only - Sep 15 3:00 0 - +Rule Hungary 1920 only - Apr 5 3:00 1:00 S +Rule Hungary 1920 only - Sep 30 3:00 0 - +Rule Hungary 1945 only - May 1 23:00 1:00 S +Rule Hungary 1945 only - Nov 3 0:00 0 - +Rule Hungary 1946 only - Mar 31 2:00s 1:00 S +Rule Hungary 1946 1949 - Oct Sun>=1 2:00s 0 - +Rule Hungary 1947 1949 - Apr Sun>=4 2:00s 1:00 S +Rule Hungary 1950 only - Apr 17 2:00s 1:00 S +Rule Hungary 1950 only - Oct 23 2:00s 0 - +Rule Hungary 1954 1955 - May 23 0:00 1:00 S +Rule Hungary 1954 1955 - Oct 3 0:00 0 - +Rule Hungary 1956 only - Jun Sun>=1 0:00 1:00 S +Rule Hungary 1956 only - Sep lastSun 0:00 0 - +Rule Hungary 1957 only - Jun Sun>=1 1:00 1:00 S +Rule Hungary 1957 only - Sep lastSun 3:00 0 - +Rule Hungary 1980 only - Apr 6 1:00 1:00 S +Zone Europe/Budapest 1:16:20 - LMT 1890 Oct + 1:00 C-Eur CE%sT 1918 + 1:00 Hungary CE%sT 1941 Apr 6 2:00 + 1:00 C-Eur CE%sT 1945 + 1:00 Hungary CE%sT 1980 Sep 28 2:00s + 1:00 EU CE%sT +Rule Iceland 1917 1918 - Feb 19 23:00 1:00 S +Rule Iceland 1917 only - Oct 21 1:00 0 - +Rule Iceland 1918 only - Nov 16 1:00 0 - +Rule Iceland 1939 only - Apr 29 23:00 1:00 S +Rule Iceland 1939 only - Nov 29 2:00 0 - +Rule Iceland 1940 only - Feb 25 2:00 1:00 S +Rule Iceland 1940 only - Nov 3 2:00 0 - +Rule Iceland 1941 only - Mar 2 1:00s 1:00 S +Rule Iceland 1941 only - Nov 2 1:00s 0 - +Rule Iceland 1942 only - Mar 8 1:00s 1:00 S +Rule Iceland 1942 only - Oct 25 1:00s 0 - +Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 S +Rule Iceland 1943 1948 - Oct Sun>=22 1:00s 0 - +Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 S +Rule Iceland 1949 only - Oct 30 1:00s 0 - +Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 - +Rule Iceland 1967 only - Oct 29 1:00s 0 - +Zone Atlantic/Reykjavik -1:27:24 - LMT 1837 + -1:27:48 - RMT 1908 # Reykjavik Mean Time? + -1:00 Iceland IS%sT 1968 Apr 7 1:00s + 0:00 - GMT +Rule Italy 1916 only - Jun 3 0:00s 1:00 S +Rule Italy 1916 only - Oct 1 0:00s 0 - +Rule Italy 1917 only - Apr 1 0:00s 1:00 S +Rule Italy 1917 only - Sep 30 0:00s 0 - +Rule Italy 1918 only - Mar 10 0:00s 1:00 S +Rule Italy 1918 1919 - Oct Sun>=1 0:00s 0 - +Rule Italy 1919 only - Mar 2 0:00s 1:00 S +Rule Italy 1920 only - Mar 21 0:00s 1:00 S +Rule Italy 1920 only - Sep 19 0:00s 0 - +Rule Italy 1940 only - Jun 15 0:00s 1:00 S +Rule Italy 1944 only - Sep 17 0:00s 0 - +Rule Italy 1945 only - Apr 2 2:00 1:00 S +Rule Italy 1945 only - Sep 15 0:00s 0 - +Rule Italy 1946 only - Mar 17 2:00s 1:00 S +Rule Italy 1946 only - Oct 6 2:00s 0 - +Rule Italy 1947 only - Mar 16 0:00s 1:00 S +Rule Italy 1947 only - Oct 5 0:00s 0 - +Rule Italy 1948 only - Feb 29 2:00s 1:00 S +Rule Italy 1948 only - Oct 3 2:00s 0 - +Rule Italy 1966 1968 - May Sun>=22 0:00 1:00 S +Rule Italy 1966 1969 - Sep Sun>=22 0:00 0 - +Rule Italy 1969 only - Jun 1 0:00 1:00 S +Rule Italy 1970 only - May 31 0:00 1:00 S +Rule Italy 1970 only - Sep lastSun 0:00 0 - +Rule Italy 1971 1972 - May Sun>=22 0:00 1:00 S +Rule Italy 1971 only - Sep lastSun 1:00 0 - +Rule Italy 1972 only - Oct 1 0:00 0 - +Rule Italy 1973 only - Jun 3 0:00 1:00 S +Rule Italy 1973 1974 - Sep lastSun 0:00 0 - +Rule Italy 1974 only - May 26 0:00 1:00 S +Rule Italy 1975 only - Jun 1 0:00s 1:00 S +Rule Italy 1975 1977 - Sep lastSun 0:00s 0 - +Rule Italy 1976 only - May 30 0:00s 1:00 S +Rule Italy 1977 1979 - May Sun>=22 0:00s 1:00 S +Rule Italy 1978 only - Oct 1 0:00s 0 - +Rule Italy 1979 only - Sep 30 0:00s 0 - +Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22 + 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean + 1:00 Italy CE%sT 1942 Nov 2 2:00s + 1:00 C-Eur CE%sT 1944 Jul + 1:00 Italy CE%sT 1980 + 1:00 EU CE%sT +Link Europe/Rome Europe/Vatican +Link Europe/Rome Europe/San_Marino +Rule Latvia 1989 1996 - Mar lastSun 2:00s 1:00 S +Rule Latvia 1989 1996 - Sep lastSun 2:00s 0 - +Zone Europe/Riga 1:36:24 - LMT 1880 + 1:36:24 - RMT 1918 Apr 15 2:00 #Riga Mean Time + 1:36:24 1:00 LST 1918 Sep 16 3:00 #Latvian Summer + 1:36:24 - RMT 1919 Apr 1 2:00 + 1:36:24 1:00 LST 1919 May 22 3:00 + 1:36:24 - RMT 1926 May 11 + 2:00 - EET 1940 Aug 5 + 3:00 - MSK 1941 Jul + 1:00 C-Eur CE%sT 1944 Oct 13 + 3:00 Russia MSK/MSD 1989 Mar lastSun 2:00s + 2:00 1:00 EEST 1989 Sep lastSun 2:00s + 2:00 Latvia EE%sT 1997 Jan 21 + 2:00 EU EE%sT 2000 Feb 29 + 2:00 - EET 2001 Jan 2 + 2:00 EU EE%sT +Zone Europe/Vaduz 0:38:04 - LMT 1894 Jun + 1:00 - CET 1981 + 1:00 EU CE%sT +Zone Europe/Vilnius 1:41:16 - LMT 1880 + 1:24:00 - WMT 1917 # Warsaw Mean Time + 1:35:36 - KMT 1919 Oct 10 # Kaunas Mean Time + 1:00 - CET 1920 Jul 12 + 2:00 - EET 1920 Oct 9 + 1:00 - CET 1940 Aug 3 + 3:00 - MSK 1941 Jun 24 + 1:00 C-Eur CE%sT 1944 Aug + 3:00 Russia MSK/MSD 1991 Mar 31 2:00s + 2:00 1:00 EEST 1991 Sep 29 2:00s + 2:00 C-Eur EE%sT 1998 + 2:00 - EET 1998 Mar 29 1:00u + 1:00 EU CE%sT 1999 Oct 31 1:00u + 2:00 - EET 2003 Jan 1 + 2:00 EU EE%sT +Rule Lux 1916 only - May 14 23:00 1:00 S +Rule Lux 1916 only - Oct 1 1:00 0 - +Rule Lux 1917 only - Apr 28 23:00 1:00 S +Rule Lux 1917 only - Sep 17 1:00 0 - +Rule Lux 1918 only - Apr Mon>=15 2:00s 1:00 S +Rule Lux 1918 only - Sep Mon>=15 2:00s 0 - +Rule Lux 1919 only - Mar 1 23:00 1:00 S +Rule Lux 1919 only - Oct 5 3:00 0 - +Rule Lux 1920 only - Feb 14 23:00 1:00 S +Rule Lux 1920 only - Oct 24 2:00 0 - +Rule Lux 1921 only - Mar 14 23:00 1:00 S +Rule Lux 1921 only - Oct 26 2:00 0 - +Rule Lux 1922 only - Mar 25 23:00 1:00 S +Rule Lux 1922 only - Oct Sun>=2 1:00 0 - +Rule Lux 1923 only - Apr 21 23:00 1:00 S +Rule Lux 1923 only - Oct Sun>=2 2:00 0 - +Rule Lux 1924 only - Mar 29 23:00 1:00 S +Rule Lux 1924 1928 - Oct Sun>=2 1:00 0 - +Rule Lux 1925 only - Apr 5 23:00 1:00 S +Rule Lux 1926 only - Apr 17 23:00 1:00 S +Rule Lux 1927 only - Apr 9 23:00 1:00 S +Rule Lux 1928 only - Apr 14 23:00 1:00 S +Rule Lux 1929 only - Apr 20 23:00 1:00 S +Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun + 1:00 Lux CE%sT 1918 Nov 25 + 0:00 Lux WE%sT 1929 Oct 6 2:00s + 0:00 Belgium WE%sT 1940 May 14 3:00 + 1:00 C-Eur WE%sT 1944 Sep 18 3:00 + 1:00 Belgium CE%sT 1977 + 1:00 EU CE%sT +Rule Malta 1973 only - Mar 31 0:00s 1:00 S +Rule Malta 1973 only - Sep 29 0:00s 0 - +Rule Malta 1974 only - Apr 21 0:00s 1:00 S +Rule Malta 1974 only - Sep 16 0:00s 0 - +Rule Malta 1975 1979 - Apr Sun>=15 2:00 1:00 S +Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 - +Rule Malta 1980 only - Mar 31 2:00 1:00 S +Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta + 1:00 Italy CE%sT 1942 Nov 2 2:00s + 1:00 C-Eur CE%sT 1945 Apr 2 2:00s + 1:00 Italy CE%sT 1973 Mar 31 + 1:00 Malta CE%sT 1981 + 1:00 EU CE%sT +Zone Europe/Chisinau 1:55:20 - LMT 1880 + 1:55 - CMT 1918 Feb 15 # Chisinau MT + 1:44:24 - BMT 1931 Jul 24 # Bucharest MT + 2:00 Romania EE%sT 1940 Aug 15 + 2:00 1:00 EEST 1941 Jul 17 + 1:00 C-Eur CE%sT 1944 Aug 24 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 May 6 + 2:00 - EET 1991 + 2:00 Russia EE%sT 1992 + 2:00 E-Eur EE%sT 1997 + 2:00 EU EE%sT +Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15 + 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time + 0:00 France WE%sT 1945 Sep 16 3:00 + 1:00 France CE%sT 1977 + 1:00 EU CE%sT +Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time +Rule Neth 1916 only - Oct 1 0:00 0 AMT # Amsterdam Mean Time +Rule Neth 1917 only - Apr 16 2:00s 1:00 NST +Rule Neth 1917 only - Sep 17 2:00s 0 AMT +Rule Neth 1918 1921 - Apr Mon>=1 2:00s 1:00 NST +Rule Neth 1918 1921 - Sep lastMon 2:00s 0 AMT +Rule Neth 1922 only - Mar lastSun 2:00s 1:00 NST +Rule Neth 1922 1936 - Oct Sun>=2 2:00s 0 AMT +Rule Neth 1923 only - Jun Fri>=1 2:00s 1:00 NST +Rule Neth 1924 only - Mar lastSun 2:00s 1:00 NST +Rule Neth 1925 only - Jun Fri>=1 2:00s 1:00 NST +Rule Neth 1926 1931 - May 15 2:00s 1:00 NST +Rule Neth 1932 only - May 22 2:00s 1:00 NST +Rule Neth 1933 1936 - May 15 2:00s 1:00 NST +Rule Neth 1937 only - May 22 2:00s 1:00 NST +Rule Neth 1937 only - Jul 1 0:00 1:00 S +Rule Neth 1937 1939 - Oct Sun>=2 2:00s 0 - +Rule Neth 1938 1939 - May 15 2:00s 1:00 S +Rule Neth 1945 only - Apr 2 2:00s 1:00 S +Rule Neth 1945 only - Sep 16 2:00s 0 - +Zone Europe/Amsterdam 0:19:32 - LMT 1835 + 0:19:32 Neth %s 1937 Jul 1 + 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time + 1:00 C-Eur CE%sT 1945 Apr 2 2:00 + 1:00 Neth CE%sT 1977 + 1:00 EU CE%sT +Rule Norway 1916 only - May 22 1:00 1:00 S +Rule Norway 1916 only - Sep 30 0:00 0 - +Rule Norway 1945 only - Apr 2 2:00s 1:00 S +Rule Norway 1945 only - Oct 1 2:00s 0 - +Rule Norway 1959 1964 - Mar Sun>=15 2:00s 1:00 S +Rule Norway 1959 1965 - Sep Sun>=15 2:00s 0 - +Rule Norway 1965 only - Apr 25 2:00s 1:00 S +Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1 + 1:00 Norway CE%sT 1940 Aug 10 23:00 + 1:00 C-Eur CE%sT 1945 Apr 2 2:00 + 1:00 Norway CE%sT 1980 + 1:00 EU CE%sT +Link Europe/Oslo Arctic/Longyearbyen +Rule Poland 1918 1919 - Sep 16 2:00s 0 - +Rule Poland 1919 only - Apr 15 2:00s 1:00 S +Rule Poland 1944 only - Apr 3 2:00s 1:00 S +Rule Poland 1944 only - Oct 4 2:00 0 - +Rule Poland 1945 only - Apr 29 0:00 1:00 S +Rule Poland 1945 only - Nov 1 0:00 0 - +Rule Poland 1946 only - Apr 14 0:00s 1:00 S +Rule Poland 1946 only - Oct 7 2:00s 0 - +Rule Poland 1947 only - May 4 2:00s 1:00 S +Rule Poland 1947 1949 - Oct Sun>=1 2:00s 0 - +Rule Poland 1948 only - Apr 18 2:00s 1:00 S +Rule Poland 1949 only - Apr 10 2:00s 1:00 S +Rule Poland 1957 only - Jun 2 1:00s 1:00 S +Rule Poland 1957 1958 - Sep lastSun 1:00s 0 - +Rule Poland 1958 only - Mar 30 1:00s 1:00 S +Rule Poland 1959 only - May 31 1:00s 1:00 S +Rule Poland 1959 1961 - Oct Sun>=1 1:00s 0 - +Rule Poland 1960 only - Apr 3 1:00s 1:00 S +Rule Poland 1961 1964 - May lastSun 1:00s 1:00 S +Rule Poland 1962 1964 - Sep lastSun 1:00s 0 - +Zone Europe/Warsaw 1:24:00 - LMT 1880 + 1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time + 1:00 C-Eur CE%sT 1918 Sep 16 3:00 + 2:00 Poland EE%sT 1922 Jun + 1:00 Poland CE%sT 1940 Jun 23 2:00 + 1:00 C-Eur CE%sT 1944 Oct + 1:00 Poland CE%sT 1977 + 1:00 W-Eur CE%sT 1988 + 1:00 EU CE%sT +Rule Port 1916 only - Jun 17 23:00 1:00 S +Rule Port 1916 only - Nov 1 1:00 0 - +Rule Port 1917 only - Feb 28 23:00s 1:00 S +Rule Port 1917 1921 - Oct 14 23:00s 0 - +Rule Port 1918 only - Mar 1 23:00s 1:00 S +Rule Port 1919 only - Feb 28 23:00s 1:00 S +Rule Port 1920 only - Feb 29 23:00s 1:00 S +Rule Port 1921 only - Feb 28 23:00s 1:00 S +Rule Port 1924 only - Apr 16 23:00s 1:00 S +Rule Port 1924 only - Oct 14 23:00s 0 - +Rule Port 1926 only - Apr 17 23:00s 1:00 S +Rule Port 1926 1929 - Oct Sat>=1 23:00s 0 - +Rule Port 1927 only - Apr 9 23:00s 1:00 S +Rule Port 1928 only - Apr 14 23:00s 1:00 S +Rule Port 1929 only - Apr 20 23:00s 1:00 S +Rule Port 1931 only - Apr 18 23:00s 1:00 S +Rule Port 1931 1932 - Oct Sat>=1 23:00s 0 - +Rule Port 1932 only - Apr 2 23:00s 1:00 S +Rule Port 1934 only - Apr 7 23:00s 1:00 S +Rule Port 1934 1938 - Oct Sat>=1 23:00s 0 - +Rule Port 1935 only - Mar 30 23:00s 1:00 S +Rule Port 1936 only - Apr 18 23:00s 1:00 S +Rule Port 1937 only - Apr 3 23:00s 1:00 S +Rule Port 1938 only - Mar 26 23:00s 1:00 S +Rule Port 1939 only - Apr 15 23:00s 1:00 S +Rule Port 1939 only - Nov 18 23:00s 0 - +Rule Port 1940 only - Feb 24 23:00s 1:00 S +Rule Port 1940 1941 - Oct 5 23:00s 0 - +Rule Port 1941 only - Apr 5 23:00s 1:00 S +Rule Port 1942 1945 - Mar Sat>=8 23:00s 1:00 S +Rule Port 1942 only - Apr 25 22:00s 2:00 M # Midsummer +Rule Port 1942 only - Aug 15 22:00s 1:00 S +Rule Port 1942 1945 - Oct Sat>=24 23:00s 0 - +Rule Port 1943 only - Apr 17 22:00s 2:00 M +Rule Port 1943 1945 - Aug Sat>=25 22:00s 1:00 S +Rule Port 1944 1945 - Apr Sat>=21 22:00s 2:00 M +Rule Port 1946 only - Apr Sat>=1 23:00s 1:00 S +Rule Port 1946 only - Oct Sat>=1 23:00s 0 - +Rule Port 1947 1949 - Apr Sun>=1 2:00s 1:00 S +Rule Port 1947 1949 - Oct Sun>=1 2:00s 0 - +Rule Port 1951 1965 - Apr Sun>=1 2:00s 1:00 S +Rule Port 1951 1965 - Oct Sun>=1 2:00s 0 - +Rule Port 1977 only - Mar 27 0:00s 1:00 S +Rule Port 1977 only - Sep 25 0:00s 0 - +Rule Port 1978 1979 - Apr Sun>=1 0:00s 1:00 S +Rule Port 1978 only - Oct 1 0:00s 0 - +Rule Port 1979 1982 - Sep lastSun 1:00s 0 - +Rule Port 1980 only - Mar lastSun 0:00s 1:00 S +Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S +Rule Port 1983 only - Mar lastSun 2:00s 1:00 S +Zone Europe/Lisbon -0:36:32 - LMT 1884 + -0:36:32 - LMT 1912 Jan 1 # Lisbon Mean Time + 0:00 Port WE%sT 1966 Apr 3 2:00 + 1:00 - CET 1976 Sep 26 1:00 + 0:00 Port WE%sT 1983 Sep 25 1:00s + 0:00 W-Eur WE%sT 1992 Sep 27 1:00s + 1:00 EU CE%sT 1996 Mar 31 1:00u + 0:00 EU WE%sT +Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada + -1:54:32 - HMT 1911 May 24 # Horta Mean Time + -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time + -1:00 Port AZO%sT 1983 Sep 25 1:00s + -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s + 0:00 EU WE%sT 1993 Mar 28 1:00u + -1:00 EU AZO%sT +Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal + -1:07:36 - FMT 1911 May 24 # Funchal Mean Time + -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time + 0:00 Port WE%sT 1983 Sep 25 1:00s + 0:00 EU WE%sT +Rule Romania 1932 only - May 21 0:00s 1:00 S +Rule Romania 1932 1939 - Oct Sun>=1 0:00s 0 - +Rule Romania 1933 1939 - Apr Sun>=2 0:00s 1:00 S +Rule Romania 1979 only - May 27 0:00 1:00 S +Rule Romania 1979 only - Sep lastSun 0:00 0 - +Rule Romania 1980 only - Apr 5 23:00 1:00 S +Rule Romania 1980 only - Sep lastSun 1:00 0 - +Rule Romania 1991 1993 - Mar lastSun 0:00s 1:00 S +Rule Romania 1991 1993 - Sep lastSun 0:00s 0 - +Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct + 1:44:24 - BMT 1931 Jul 24 # Bucharest MT + 2:00 Romania EE%sT 1981 Mar 29 2:00s + 2:00 C-Eur EE%sT 1991 + 2:00 Romania EE%sT 1994 + 2:00 E-Eur EE%sT 1997 + 2:00 EU EE%sT +Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr + 1:00 C-Eur CE%sT 1945 + 2:00 Poland CE%sT 1946 + 3:00 Russia MSK/MSD 1991 Mar 31 2:00s + 2:00 Russia EE%sT +Zone Europe/Moscow 2:30:20 - LMT 1880 + 2:30 - MMT 1916 Jul 3 # Moscow Mean Time + 2:30:48 Russia %s 1919 Jul 1 2:00 + 3:00 Russia MSK/MSD 1922 Oct + 2:00 - EET 1930 Jun 21 + 3:00 Russia MSK/MSD 1991 Mar 31 2:00s + 2:00 Russia EE%sT 1992 Jan 19 2:00s + 3:00 Russia MSK/MSD +Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3 + 3:00 - TSAT 1925 Apr 6 # Tsaritsyn Time + 3:00 - STAT 1930 Jun 21 # Stalingrad Time + 4:00 - STAT 1961 Nov 11 + 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T + 3:00 Russia VOL%sT 1991 Mar 31 2:00s + 4:00 - VOLT 1992 Mar 29 2:00s + 3:00 Russia VOL%sT +Zone Europe/Samara 3:20:36 - LMT 1919 Jul 1 2:00 + 3:00 - SAMT 1930 Jun 21 + 4:00 - SAMT 1935 Jan 27 + 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev + 3:00 Russia KUY%sT 1991 Mar 31 2:00s + 2:00 Russia KUY%sT 1991 Sep 29 2:00s + 3:00 - KUYT 1991 Oct 20 3:00 + 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time + 3:00 Russia SAM%sT +Zone Asia/Yekaterinburg 4:02:24 - LMT 1919 Jul 15 4:00 + 4:00 - SVET 1930 Jun 21 # Sverdlovsk Time + 5:00 Russia SVE%sT 1991 Mar 31 2:00s + 4:00 Russia SVE%sT 1992 Jan 19 2:00s + 5:00 Russia YEK%sT # Yekaterinburg Time +Zone Asia/Omsk 4:53:36 - LMT 1919 Nov 14 + 5:00 - OMST 1930 Jun 21 # Omsk TIme + 6:00 Russia OMS%sT 1991 Mar 31 2:00s + 5:00 Russia OMS%sT 1992 Jan 19 2:00s + 6:00 Russia OMS%sT +Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00 + 6:00 - NOVT 1930 Jun 21 # Novosibirsk Time + 7:00 Russia NOV%sT 1991 Mar 31 2:00s + 6:00 Russia NOV%sT 1992 Jan 19 2:00s + 7:00 Russia NOV%sT 1993 May 23 # say Shanks & P. + 6:00 Russia NOV%sT +Zone Asia/Novokuznetsk 5:48:48 - NMT 1920 Jan 6 + 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time + 7:00 Russia KRA%sT 1991 Mar 31 2:00s + 6:00 Russia KRA%sT 1992 Jan 19 2:00s + 7:00 Russia KRA%sT 2010 Mar 28 2:00s + 6:00 Russia NOV%sT # Novosibirsk/Novokuznetsk Time +Zone Asia/Krasnoyarsk 6:11:20 - LMT 1920 Jan 6 + 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time + 7:00 Russia KRA%sT 1991 Mar 31 2:00s + 6:00 Russia KRA%sT 1992 Jan 19 2:00s + 7:00 Russia KRA%sT +Zone Asia/Irkutsk 6:57:20 - LMT 1880 + 6:57:20 - IMT 1920 Jan 25 # Irkutsk Mean Time + 7:00 - IRKT 1930 Jun 21 # Irkutsk Time + 8:00 Russia IRK%sT 1991 Mar 31 2:00s + 7:00 Russia IRK%sT 1992 Jan 19 2:00s + 8:00 Russia IRK%sT +Zone Asia/Yakutsk 8:38:40 - LMT 1919 Dec 15 + 8:00 - YAKT 1930 Jun 21 # Yakutsk Time + 9:00 Russia YAK%sT 1991 Mar 31 2:00s + 8:00 Russia YAK%sT 1992 Jan 19 2:00s + 9:00 Russia YAK%sT +Zone Asia/Vladivostok 8:47:44 - LMT 1922 Nov 15 + 9:00 - VLAT 1930 Jun 21 # Vladivostok Time + 10:00 Russia VLA%sT 1991 Mar 31 2:00s + 9:00 Russia VLA%sST 1992 Jan 19 2:00s + 10:00 Russia VLA%sT +Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23 + 9:00 - CJT 1938 + 9:00 - JST 1945 Aug 25 + 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T. + 10:00 Russia SAK%sT 1992 Jan 19 2:00s + 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s + 10:00 Russia SAK%sT +Zone Asia/Magadan 10:03:12 - LMT 1924 May 2 + 10:00 - MAGT 1930 Jun 21 # Magadan Time + 11:00 Russia MAG%sT 1991 Mar 31 2:00s + 10:00 Russia MAG%sT 1992 Jan 19 2:00s + 11:00 Russia MAG%sT +Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10 + 11:00 - PETT 1930 Jun 21 # P-K Time + 12:00 Russia PET%sT 1991 Mar 31 2:00s + 11:00 Russia PET%sT 1992 Jan 19 2:00s + 12:00 Russia PET%sT 2010 Mar 28 2:00s + 11:00 Russia PET%sT +Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2 + 12:00 - ANAT 1930 Jun 21 # Anadyr Time + 13:00 Russia ANA%sT 1982 Apr 1 0:00s + 12:00 Russia ANA%sT 1991 Mar 31 2:00s + 11:00 Russia ANA%sT 1992 Jan 19 2:00s + 12:00 Russia ANA%sT 2010 Mar 28 2:00s + 11:00 Russia ANA%sT +Zone Europe/Belgrade 1:22:00 - LMT 1884 + 1:00 - CET 1941 Apr 18 23:00 + 1:00 C-Eur CE%sT 1945 + 1:00 - CET 1945 May 8 2:00s + 1:00 1:00 CEST 1945 Sep 16 2:00s + 1:00 - CET 1982 Nov 27 + 1:00 EU CE%sT +Link Europe/Belgrade Europe/Ljubljana # Slovenia +Link Europe/Belgrade Europe/Podgorica # Montenegro +Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina +Link Europe/Belgrade Europe/Skopje # Macedonia +Link Europe/Belgrade Europe/Zagreb # Croatia +Link Europe/Prague Europe/Bratislava +Rule Spain 1917 only - May 5 23:00s 1:00 S +Rule Spain 1917 1919 - Oct 6 23:00s 0 - +Rule Spain 1918 only - Apr 15 23:00s 1:00 S +Rule Spain 1919 only - Apr 5 23:00s 1:00 S +Rule Spain 1924 only - Apr 16 23:00s 1:00 S +Rule Spain 1924 only - Oct 4 23:00s 0 - +Rule Spain 1926 only - Apr 17 23:00s 1:00 S +Rule Spain 1926 1929 - Oct Sat>=1 23:00s 0 - +Rule Spain 1927 only - Apr 9 23:00s 1:00 S +Rule Spain 1928 only - Apr 14 23:00s 1:00 S +Rule Spain 1929 only - Apr 20 23:00s 1:00 S +Rule Spain 1937 only - May 22 23:00s 1:00 S +Rule Spain 1937 1939 - Oct Sat>=1 23:00s 0 - +Rule Spain 1938 only - Mar 22 23:00s 1:00 S +Rule Spain 1939 only - Apr 15 23:00s 1:00 S +Rule Spain 1940 only - Mar 16 23:00s 1:00 S +Rule Spain 1942 only - May 2 22:00s 2:00 M # Midsummer +Rule Spain 1942 only - Sep 1 22:00s 1:00 S +Rule Spain 1943 1946 - Apr Sat>=13 22:00s 2:00 M +Rule Spain 1943 only - Oct 3 22:00s 1:00 S +Rule Spain 1944 only - Oct 10 22:00s 1:00 S +Rule Spain 1945 only - Sep 30 1:00 1:00 S +Rule Spain 1946 only - Sep 30 0:00 0 - +Rule Spain 1949 only - Apr 30 23:00 1:00 S +Rule Spain 1949 only - Sep 30 1:00 0 - +Rule Spain 1974 1975 - Apr Sat>=13 23:00 1:00 S +Rule Spain 1974 1975 - Oct Sun>=1 1:00 0 - +Rule Spain 1976 only - Mar 27 23:00 1:00 S +Rule Spain 1976 1977 - Sep lastSun 1:00 0 - +Rule Spain 1977 1978 - Apr 2 23:00 1:00 S +Rule Spain 1978 only - Oct 1 1:00 0 - +Rule SpainAfrica 1967 only - Jun 3 12:00 1:00 S +Rule SpainAfrica 1967 only - Oct 1 0:00 0 - +Rule SpainAfrica 1974 only - Jun 24 0:00 1:00 S +Rule SpainAfrica 1974 only - Sep 1 0:00 0 - +Rule SpainAfrica 1976 1977 - May 1 0:00 1:00 S +Rule SpainAfrica 1976 only - Aug 1 0:00 0 - +Rule SpainAfrica 1977 only - Sep 28 0:00 0 - +Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S +Rule SpainAfrica 1978 only - Aug 4 0:00 0 - +Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00s + 0:00 Spain WE%sT 1946 Sep 30 + 1:00 Spain CE%sT 1979 + 1:00 EU CE%sT +Zone Africa/Ceuta -0:21:16 - LMT 1901 + 0:00 - WET 1918 May 6 23:00 + 0:00 1:00 WEST 1918 Oct 7 23:00 + 0:00 - WET 1924 + 0:00 Spain WE%sT 1929 + 0:00 SpainAfrica WE%sT 1984 Mar 16 + 1:00 - CET 1986 + 1:00 EU CE%sT +Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C. + -1:00 - CANT 1946 Sep 30 1:00 # Canaries Time + 0:00 - WET 1980 Apr 6 0:00s + 0:00 1:00 WEST 1980 Sep 28 0:00s + 0:00 EU WE%sT +Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1 + 1:00:14 - SET 1900 Jan 1 # Swedish Time + 1:00 - CET 1916 May 14 23:00 + 1:00 1:00 CEST 1916 Oct 1 01:00 + 1:00 - CET 1980 + 1:00 EU CE%sT +Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S +Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 - +Zone Europe/Zurich 0:34:08 - LMT 1848 Sep 12 + 0:29:44 - BMT 1894 Jun # Bern Mean Time + 1:00 Swiss CE%sT 1981 + 1:00 EU CE%sT +Rule Turkey 1916 only - May 1 0:00 1:00 S +Rule Turkey 1916 only - Oct 1 0:00 0 - +Rule Turkey 1920 only - Mar 28 0:00 1:00 S +Rule Turkey 1920 only - Oct 25 0:00 0 - +Rule Turkey 1921 only - Apr 3 0:00 1:00 S +Rule Turkey 1921 only - Oct 3 0:00 0 - +Rule Turkey 1922 only - Mar 26 0:00 1:00 S +Rule Turkey 1922 only - Oct 8 0:00 0 - +Rule Turkey 1924 only - May 13 0:00 1:00 S +Rule Turkey 1924 1925 - Oct 1 0:00 0 - +Rule Turkey 1925 only - May 1 0:00 1:00 S +Rule Turkey 1940 only - Jun 30 0:00 1:00 S +Rule Turkey 1940 only - Oct 5 0:00 0 - +Rule Turkey 1940 only - Dec 1 0:00 1:00 S +Rule Turkey 1941 only - Sep 21 0:00 0 - +Rule Turkey 1942 only - Apr 1 0:00 1:00 S +Rule Turkey 1942 only - Nov 1 0:00 0 - +Rule Turkey 1945 only - Apr 2 0:00 1:00 S +Rule Turkey 1945 only - Oct 8 0:00 0 - +Rule Turkey 1946 only - Jun 1 0:00 1:00 S +Rule Turkey 1946 only - Oct 1 0:00 0 - +Rule Turkey 1947 1948 - Apr Sun>=16 0:00 1:00 S +Rule Turkey 1947 1950 - Oct Sun>=2 0:00 0 - +Rule Turkey 1949 only - Apr 10 0:00 1:00 S +Rule Turkey 1950 only - Apr 19 0:00 1:00 S +Rule Turkey 1951 only - Apr 22 0:00 1:00 S +Rule Turkey 1951 only - Oct 8 0:00 0 - +Rule Turkey 1962 only - Jul 15 0:00 1:00 S +Rule Turkey 1962 only - Oct 8 0:00 0 - +Rule Turkey 1964 only - May 15 0:00 1:00 S +Rule Turkey 1964 only - Oct 1 0:00 0 - +Rule Turkey 1970 1972 - May Sun>=2 0:00 1:00 S +Rule Turkey 1970 1972 - Oct Sun>=2 0:00 0 - +Rule Turkey 1973 only - Jun 3 1:00 1:00 S +Rule Turkey 1973 only - Nov 4 3:00 0 - +Rule Turkey 1974 only - Mar 31 2:00 1:00 S +Rule Turkey 1974 only - Nov 3 5:00 0 - +Rule Turkey 1975 only - Mar 30 0:00 1:00 S +Rule Turkey 1975 1976 - Oct lastSun 0:00 0 - +Rule Turkey 1976 only - Jun 1 0:00 1:00 S +Rule Turkey 1977 1978 - Apr Sun>=1 0:00 1:00 S +Rule Turkey 1977 only - Oct 16 0:00 0 - +Rule Turkey 1979 1980 - Apr Sun>=1 3:00 1:00 S +Rule Turkey 1979 1982 - Oct Mon>=11 0:00 0 - +Rule Turkey 1981 1982 - Mar lastSun 3:00 1:00 S +Rule Turkey 1983 only - Jul 31 0:00 1:00 S +Rule Turkey 1983 only - Oct 2 0:00 0 - +Rule Turkey 1985 only - Apr 20 0:00 1:00 S +Rule Turkey 1985 only - Sep 28 0:00 0 - +Rule Turkey 1986 1990 - Mar lastSun 2:00s 1:00 S +Rule Turkey 1986 1990 - Sep lastSun 2:00s 0 - +Rule Turkey 1991 2006 - Mar lastSun 1:00s 1:00 S +Rule Turkey 1991 1995 - Sep lastSun 1:00s 0 - +Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 - +Zone Europe/Istanbul 1:55:52 - LMT 1880 + 1:56:56 - IMT 1910 Oct # Istanbul Mean Time? + 2:00 Turkey EE%sT 1978 Oct 15 + 3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time + 2:00 Turkey EE%sT 2007 + 2:00 EU EE%sT 2011 Mar 27 1:00u + 2:00 - EET 2011 Mar 28 1:00u + 2:00 EU EE%sT +Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents. +Zone Europe/Kiev 2:02:04 - LMT 1880 + 2:02:04 - KMT 1924 May 2 # Kiev Mean Time + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Sep 20 + 1:00 C-Eur CE%sT 1943 Nov 6 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 Jul 1 2:00 + 2:00 - EET 1992 + 2:00 E-Eur EE%sT 1995 + 2:00 EU EE%sT +Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct + 1:00 - CET 1940 + 1:00 C-Eur CE%sT 1944 Oct + 1:00 1:00 CEST 1944 Oct 26 + 1:00 - CET 1945 Jun 29 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 Jul 1 2:00 + 1:00 - CET 1991 Mar 31 3:00 + 2:00 - EET 1992 + 2:00 E-Eur EE%sT 1995 + 2:00 EU EE%sT +Zone Europe/Zaporozhye 2:20:40 - LMT 1880 + 2:20 - CUT 1924 May 2 # Central Ukraine T + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Aug 25 + 1:00 C-Eur CE%sT 1943 Oct 25 + 3:00 Russia MSK/MSD 1991 Mar 31 2:00 + 2:00 E-Eur EE%sT 1995 + 2:00 EU EE%sT +Zone Europe/Simferopol 2:16:24 - LMT 1880 + 2:16 - SMT 1924 May 2 # Simferopol Mean T + 2:00 - EET 1930 Jun 21 + 3:00 - MSK 1941 Nov + 1:00 C-Eur CE%sT 1944 Apr 13 + 3:00 Russia MSK/MSD 1990 + 3:00 - MSK 1990 Jul 1 2:00 + 2:00 - EET 1992 + 2:00 E-Eur EE%sT 1994 May + 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s + 3:00 1:00 MSD 1996 Oct 27 3:00s + 3:00 Russia MSK/MSD 1997 + 3:00 - MSK 1997 Mar lastSun 1:00u + 2:00 EU EE%sT diff --git a/examples/tz/factory b/examples/tz/factory new file mode 100644 index 0000000..6f84c8c --- /dev/null +++ b/examples/tz/factory @@ -0,0 +1 @@ +Zone Factory 0 - "Local time zone must be set--see zic manual page" diff --git a/examples/tz/iso3166.tab b/examples/tz/iso3166.tab new file mode 100644 index 0000000..b8a2592 --- /dev/null +++ b/examples/tz/iso3166.tab @@ -0,0 +1,271 @@ +#
    +# @(#)iso3166.tab	8.6
    +# This file is in the public domain, so clarified as of
    +# 2009-05-17 by Arthur David Olson.
    +# ISO 3166 alpha-2 country codes
    +#
    +# From Paul Eggert (2006-09-27):
    +#
    +# This file contains a table with the following columns:
    +# 1.  ISO 3166-1 alpha-2 country code, current as of
    +#     ISO 3166-1 Newsletter VI-1 (2007-09-21).  See:
    +#     
    +#     ISO 3166 Maintenance agency (ISO 3166/MA)
    +#     .
    +# 2.  The usual English name for the country,
    +#     chosen so that alphabetic sorting of subsets produces helpful lists.
    +#     This is not the same as the English name in the ISO 3166 tables.
    +#
    +# Columns are separated by a single tab.
    +# The table is sorted by country code.
    +#
    +# Lines beginning with `#' are comments.
    +#
    +#country-
    +#code	country name
    +AD	Andorra
    +AE	United Arab Emirates
    +AF	Afghanistan
    +AG	Antigua & Barbuda
    +AI	Anguilla
    +AL	Albania
    +AM	Armenia
    +AN	Netherlands Antilles
    +AO	Angola
    +AQ	Antarctica
    +AR	Argentina
    +AS	Samoa (American)
    +AT	Austria
    +AU	Australia
    +AW	Aruba
    +AX	Aaland Islands
    +AZ	Azerbaijan
    +BA	Bosnia & Herzegovina
    +BB	Barbados
    +BD	Bangladesh
    +BE	Belgium
    +BF	Burkina Faso
    +BG	Bulgaria
    +BH	Bahrain
    +BI	Burundi
    +BJ	Benin
    +BL	St Barthelemy
    +BM	Bermuda
    +BN	Brunei
    +BO	Bolivia
    +BR	Brazil
    +BS	Bahamas
    +BT	Bhutan
    +BV	Bouvet Island
    +BW	Botswana
    +BY	Belarus
    +BZ	Belize
    +CA	Canada
    +CC	Cocos (Keeling) Islands
    +CD	Congo (Dem. Rep.)
    +CF	Central African Rep.
    +CG	Congo (Rep.)
    +CH	Switzerland
    +CI	Cote d'Ivoire
    +CK	Cook Islands
    +CL	Chile
    +CM	Cameroon
    +CN	China
    +CO	Colombia
    +CR	Costa Rica
    +CU	Cuba
    +CV	Cape Verde
    +CX	Christmas Island
    +CY	Cyprus
    +CZ	Czech Republic
    +DE	Germany
    +DJ	Djibouti
    +DK	Denmark
    +DM	Dominica
    +DO	Dominican Republic
    +DZ	Algeria
    +EC	Ecuador
    +EE	Estonia
    +EG	Egypt
    +EH	Western Sahara
    +ER	Eritrea
    +ES	Spain
    +ET	Ethiopia
    +FI	Finland
    +FJ	Fiji
    +FK	Falkland Islands
    +FM	Micronesia
    +FO	Faroe Islands
    +FR	France
    +GA	Gabon
    +GB	Britain (UK)
    +GD	Grenada
    +GE	Georgia
    +GF	French Guiana
    +GG	Guernsey
    +GH	Ghana
    +GI	Gibraltar
    +GL	Greenland
    +GM	Gambia
    +GN	Guinea
    +GP	Guadeloupe
    +GQ	Equatorial Guinea
    +GR	Greece
    +GS	South Georgia & the South Sandwich Islands
    +GT	Guatemala
    +GU	Guam
    +GW	Guinea-Bissau
    +GY	Guyana
    +HK	Hong Kong
    +HM	Heard Island & McDonald Islands
    +HN	Honduras
    +HR	Croatia
    +HT	Haiti
    +HU	Hungary
    +ID	Indonesia
    +IE	Ireland
    +IL	Israel
    +IM	Isle of Man
    +IN	India
    +IO	British Indian Ocean Territory
    +IQ	Iraq
    +IR	Iran
    +IS	Iceland
    +IT	Italy
    +JE	Jersey
    +JM	Jamaica
    +JO	Jordan
    +JP	Japan
    +KE	Kenya
    +KG	Kyrgyzstan
    +KH	Cambodia
    +KI	Kiribati
    +KM	Comoros
    +KN	St Kitts & Nevis
    +KP	Korea (North)
    +KR	Korea (South)
    +KW	Kuwait
    +KY	Cayman Islands
    +KZ	Kazakhstan
    +LA	Laos
    +LB	Lebanon
    +LC	St Lucia
    +LI	Liechtenstein
    +LK	Sri Lanka
    +LR	Liberia
    +LS	Lesotho
    +LT	Lithuania
    +LU	Luxembourg
    +LV	Latvia
    +LY	Libya
    +MA	Morocco
    +MC	Monaco
    +MD	Moldova
    +ME	Montenegro
    +MF	St Martin (French part)
    +MG	Madagascar
    +MH	Marshall Islands
    +MK	Macedonia
    +ML	Mali
    +MM	Myanmar (Burma)
    +MN	Mongolia
    +MO	Macau
    +MP	Northern Mariana Islands
    +MQ	Martinique
    +MR	Mauritania
    +MS	Montserrat
    +MT	Malta
    +MU	Mauritius
    +MV	Maldives
    +MW	Malawi
    +MX	Mexico
    +MY	Malaysia
    +MZ	Mozambique
    +NA	Namibia
    +NC	New Caledonia
    +NE	Niger
    +NF	Norfolk Island
    +NG	Nigeria
    +NI	Nicaragua
    +NL	Netherlands
    +NO	Norway
    +NP	Nepal
    +NR	Nauru
    +NU	Niue
    +NZ	New Zealand
    +OM	Oman
    +PA	Panama
    +PE	Peru
    +PF	French Polynesia
    +PG	Papua New Guinea
    +PH	Philippines
    +PK	Pakistan
    +PL	Poland
    +PM	St Pierre & Miquelon
    +PN	Pitcairn
    +PR	Puerto Rico
    +PS	Palestine
    +PT	Portugal
    +PW	Palau
    +PY	Paraguay
    +QA	Qatar
    +RE	Reunion
    +RO	Romania
    +RS	Serbia
    +RU	Russia
    +RW	Rwanda
    +SA	Saudi Arabia
    +SB	Solomon Islands
    +SC	Seychelles
    +SD	Sudan
    +SE	Sweden
    +SG	Singapore
    +SH	St Helena
    +SI	Slovenia
    +SJ	Svalbard & Jan Mayen
    +SK	Slovakia
    +SL	Sierra Leone
    +SM	San Marino
    +SN	Senegal
    +SO	Somalia
    +SR	Suriname
    +ST	Sao Tome & Principe
    +SV	El Salvador
    +SY	Syria
    +SZ	Swaziland
    +TC	Turks & Caicos Is
    +TD	Chad
    +TF	French Southern & Antarctic Lands
    +TG	Togo
    +TH	Thailand
    +TJ	Tajikistan
    +TK	Tokelau
    +TL	East Timor
    +TM	Turkmenistan
    +TN	Tunisia
    +TO	Tonga
    +TR	Turkey
    +TT	Trinidad & Tobago
    +TV	Tuvalu
    +TW	Taiwan
    +TZ	Tanzania
    +UA	Ukraine
    +UG	Uganda
    +UM	US minor outlying islands
    +US	United States
    +UY	Uruguay
    +UZ	Uzbekistan
    +VA	Vatican City
    +VC	St Vincent
    +VE	Venezuela
    +VG	Virgin Islands (UK)
    +VI	Virgin Islands (US)
    +VN	Vietnam
    +VU	Vanuatu
    +WF	Wallis & Futuna
    +WS	Samoa (western)
    +YE	Yemen
    +YT	Mayotte
    +ZA	South Africa
    +ZM	Zambia
    +ZW	Zimbabwe
    diff --git a/examples/tz/leapseconds b/examples/tz/leapseconds
    new file mode 100644
    index 0000000..dd08290
    --- /dev/null
    +++ b/examples/tz/leapseconds
    @@ -0,0 +1,87 @@
    +# 
    +# @(#)leapseconds	8.11
    +# This file is in the public domain, so clarified as of
    +# 2009-05-17 by Arthur David Olson.
    +
    +# Allowance for leapseconds added to each timezone file.
    +
    +# The International Earth Rotation Service periodically uses leap seconds
    +# to keep UTC to within 0.9 s of UT1
    +# (which measures the true angular orientation of the earth in space); see
    +# Terry J Quinn, The BIPM and the accurate measure of time,
    +# Proc IEEE 79, 7 (July 1991), 894-905.
    +# There were no leap seconds before 1972, because the official mechanism
    +# accounting for the discrepancy between atomic time and the earth's rotation
    +# did not exist until the early 1970s.
    +
    +# The correction (+ or -) is made at the given time, so lines
    +# will typically look like:
    +#	Leap	YEAR	MON	DAY	23:59:60	+	R/S
    +# or
    +#	Leap	YEAR	MON	DAY	23:59:59	-	R/S
    +
    +# If the leapsecond is Rolling (R) the given time is local time
    +# If the leapsecond is Stationary (S) the given time is UTC
    +
    +# Leap	YEAR	MONTH	DAY	HH:MM:SS	CORR	R/S
    +Leap	1972	Jun	30	23:59:60	+	S
    +Leap	1972	Dec	31	23:59:60	+	S
    +Leap	1973	Dec	31	23:59:60	+	S
    +Leap	1974	Dec	31	23:59:60	+	S
    +Leap	1975	Dec	31	23:59:60	+	S
    +Leap	1976	Dec	31	23:59:60	+	S
    +Leap	1977	Dec	31	23:59:60	+	S
    +Leap	1978	Dec	31	23:59:60	+	S
    +Leap	1979	Dec	31	23:59:60	+	S
    +Leap	1981	Jun	30	23:59:60	+	S
    +Leap	1982	Jun	30	23:59:60	+	S
    +Leap	1983	Jun	30	23:59:60	+	S
    +Leap	1985	Jun	30	23:59:60	+	S
    +Leap	1987	Dec	31	23:59:60	+	S
    +Leap	1989	Dec	31	23:59:60	+	S
    +Leap	1990	Dec	31	23:59:60	+	S
    +Leap	1992	Jun	30	23:59:60	+	S
    +Leap	1993	Jun	30	23:59:60	+	S
    +Leap	1994	Jun	30	23:59:60	+	S
    +Leap	1995	Dec	31	23:59:60	+	S
    +Leap	1997	Jun	30	23:59:60	+	S
    +Leap	1998	Dec	31	23:59:60	+	S
    +Leap	2005	Dec	31	23:59:60	+	S
    +Leap	2008	Dec	31	23:59:60	+	S
    +
    +# INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
    +#
    +# SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE
    +#
    +# SERVICE DE LA ROTATION TERRESTRE
    +# OBSERVATOIRE DE PARIS
    +# 61, Av. de l'Observatoire 75014 PARIS (France)
    +# Tel.      : 33 (0) 1 40 51 22 29
    +# FAX       : 33 (0) 1 40 51 22 91
    +# Internet  : services.iers@obspm.fr
    +#
    +# Paris, 2 February 2011
    +#
    +# Bulletin C 41
    +#
    +# To authorities responsible
    +# for the measurement and
    +# distribution of time
    +#
    +# INFORMATION ON UTC - TAI
    +#
    +# NO positive leap second will be introduced at the end of June 2011.
    +# The difference between Coordinated Universal Time UTC and the
    +# International Atomic Time TAI is :		
    +#
    +# from 2009 January 1, 0h UTC, until further notice : UTC-TAI = -34 s
    +#
    +# Leap seconds can be introduced in UTC at the end of the months of December
    +# or June,  depending on the evolution of UT1-TAI. Bulletin C is mailed every
    +# six months, either to announce a time step in UTC, or to confirm that there
    +# will be no time step at the next possible date.
    +#
    +# Daniel GAMBIS
    +# Head			
    +# Earth Orientation Center of the IERS
    +# Observatoire de Paris, France
    diff --git a/examples/tz/northamerica b/examples/tz/northamerica
    new file mode 100644
    index 0000000..c6dfc82
    --- /dev/null
    +++ b/examples/tz/northamerica
    @@ -0,0 +1,965 @@
    +Rule	US	1918	1919	-	Mar	lastSun	2:00	1:00	D
    +Rule	US	1918	1919	-	Oct	lastSun	2:00	0	S
    +Rule	US	1942	only	-	Feb	9	2:00	1:00	W # War
    +Rule	US	1945	only	-	Aug	14	23:00u	1:00	P # Peace
    +Rule	US	1945	only	-	Sep	30	2:00	0	S
    +Rule	US	1967	2006	-	Oct	lastSun	2:00	0	S
    +Rule	US	1967	1973	-	Apr	lastSun	2:00	1:00	D
    +Rule	US	1974	only	-	Jan	6	2:00	1:00	D
    +Rule	US	1975	only	-	Feb	23	2:00	1:00	D
    +Rule	US	1976	1986	-	Apr	lastSun	2:00	1:00	D
    +Rule	US	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
    +Rule	US	2007	max	-	Mar	Sun>=8	2:00	1:00	D
    +Rule	US	2007	max	-	Nov	Sun>=1	2:00	0	S
    +Zone	EST		 -5:00	-	EST
    +Zone	MST		 -7:00	-	MST
    +Zone	HST		-10:00	-	HST
    +Zone	EST5EDT		 -5:00	US	E%sT
    +Zone	CST6CDT		 -6:00	US	C%sT
    +Zone	MST7MDT		 -7:00	US	M%sT
    +Zone	PST8PDT		 -8:00	US	P%sT
    +Rule	NYC	1920	only	-	Mar	lastSun	2:00	1:00	D
    +Rule	NYC	1920	only	-	Oct	lastSun	2:00	0	S
    +Rule	NYC	1921	1966	-	Apr	lastSun	2:00	1:00	D
    +Rule	NYC	1921	1954	-	Sep	lastSun	2:00	0	S
    +Rule	NYC	1955	1966	-	Oct	lastSun	2:00	0	S
    +Zone America/New_York	-4:56:02 -	LMT	1883 Nov 18 12:03:58
    +			-5:00	US	E%sT	1920
    +			-5:00	NYC	E%sT	1942
    +			-5:00	US	E%sT	1946
    +			-5:00	NYC	E%sT	1967
    +			-5:00	US	E%sT
    +Rule	Chicago	1920	only	-	Jun	13	2:00	1:00	D
    +Rule	Chicago	1920	1921	-	Oct	lastSun	2:00	0	S
    +Rule	Chicago	1921	only	-	Mar	lastSun	2:00	1:00	D
    +Rule	Chicago	1922	1966	-	Apr	lastSun	2:00	1:00	D
    +Rule	Chicago	1922	1954	-	Sep	lastSun	2:00	0	S
    +Rule	Chicago	1955	1966	-	Oct	lastSun	2:00	0	S
    +Zone America/Chicago	-5:50:36 -	LMT	1883 Nov 18 12:09:24
    +			-6:00	US	C%sT	1920
    +			-6:00	Chicago	C%sT	1936 Mar  1 2:00
    +			-5:00	-	EST	1936 Nov 15 2:00
    +			-6:00	Chicago	C%sT	1942
    +			-6:00	US	C%sT	1946
    +			-6:00	Chicago	C%sT	1967
    +			-6:00	US	C%sT
    +Zone America/North_Dakota/Center -6:45:12 - LMT	1883 Nov 18 12:14:48
    +			-7:00	US	M%sT	1992 Oct 25 02:00
    +			-6:00	US	C%sT
    +Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
    +			-7:00	US	M%sT	2003 Oct 26 02:00
    +			-6:00	US	C%sT
    +Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
    +			-7:00	US	M%sT	2010 Nov  7 2:00
    +			-6:00	US	C%sT
    +Rule	Denver	1920	1921	-	Mar	lastSun	2:00	1:00	D
    +Rule	Denver	1920	only	-	Oct	lastSun	2:00	0	S
    +Rule	Denver	1921	only	-	May	22	2:00	0	S
    +Rule	Denver	1965	1966	-	Apr	lastSun	2:00	1:00	D
    +Rule	Denver	1965	1966	-	Oct	lastSun	2:00	0	S
    +Zone America/Denver	-6:59:56 -	LMT	1883 Nov 18 12:00:04
    +			-7:00	US	M%sT	1920
    +			-7:00	Denver	M%sT	1942
    +			-7:00	US	M%sT	1946
    +			-7:00	Denver	M%sT	1967
    +			-7:00	US	M%sT
    +Rule	CA	1948	only	-	Mar	14	2:00	1:00	D
    +Rule	CA	1949	only	-	Jan	 1	2:00	0	S
    +Rule	CA	1950	1966	-	Apr	lastSun	2:00	1:00	D
    +Rule	CA	1950	1961	-	Sep	lastSun	2:00	0	S
    +Rule	CA	1962	1966	-	Oct	lastSun	2:00	0	S
    +Zone America/Los_Angeles -7:52:58 -	LMT	1883 Nov 18 12:07:02
    +			-8:00	US	P%sT	1946
    +			-8:00	CA	P%sT	1967
    +			-8:00	US	P%sT
    +Zone America/Juneau	 15:02:19 -	LMT	1867 Oct 18
    +			 -8:57:41 -	LMT	1900 Aug 20 12:00
    +			 -8:00	-	PST	1942
    +			 -8:00	US	P%sT	1946
    +			 -8:00	-	PST	1969
    +			 -8:00	US	P%sT	1980 Apr 27 2:00
    +			 -9:00	US	Y%sT	1980 Oct 26 2:00	
    +			 -8:00	US	P%sT	1983 Oct 30 2:00
    +			 -9:00	US	Y%sT	1983 Nov 30
    +			 -9:00	US	AK%sT
    +Zone America/Sitka	 -14:58:47 -	LMT	1867 Oct 18
    +			 -9:01:13 -	LMT	1900 Aug 20 12:00
    +			 -8:00	-	PST	1942
    +			 -8:00	US	P%sT	1946
    +			 -8:00	-	PST	1969
    +			 -8:00	US	P%sT	1983 Oct 30 2:00
    +			 -9:00	US	Y%sT	1983 Nov 30
    +			 -9:00	US	AK%sT
    +Zone America/Metlakatla	 15:13:42 -	LMT	1867 Oct 18
    +			 -8:46:18 -	LMT	1900 Aug 20 12:00
    +			 -8:00	-	PST	1942
    +			 -8:00	US	P%sT	1946
    +			 -8:00	-	PST	1969
    +			 -8:00	US	P%sT	1983 Oct 30 2:00
    +			 -8:00	US	MeST
    +Zone America/Yakutat	 14:41:05 -	LMT	1867 Oct 18
    +			 -9:18:55 -	LMT	1900 Aug 20 12:00
    +			 -9:00	-	YST	1942
    +			 -9:00	US	Y%sT	1946
    +			 -9:00	-	YST	1969
    +			 -9:00	US	Y%sT	1983 Nov 30
    +			 -9:00	US	AK%sT
    +Zone America/Anchorage	 14:00:24 -	LMT	1867 Oct 18
    +			 -9:59:36 -	LMT	1900 Aug 20 12:00
    +			-10:00	-	CAT	1942
    +			-10:00	US	CAT/CAWT 1945 Aug 14 23:00u
    +			-10:00	US	CAT/CAPT 1946 # Peace
    +			-10:00	-	CAT	1967 Apr
    +			-10:00	-	AHST	1969
    +			-10:00	US	AH%sT	1983 Oct 30 2:00
    +			 -9:00	US	Y%sT	1983 Nov 30
    +			 -9:00	US	AK%sT
    +Zone America/Nome	 12:58:21 -	LMT	1867 Oct 18
    +			-11:01:38 -	LMT	1900 Aug 20 12:00
    +			-11:00	-	NST	1942
    +			-11:00	US	N%sT	1946
    +			-11:00	-	NST	1967 Apr
    +			-11:00	-	BST	1969
    +			-11:00	US	B%sT	1983 Oct 30 2:00
    +			 -9:00	US	Y%sT	1983 Nov 30
    +			 -9:00	US	AK%sT
    +Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
    +			-11:46:38 -	LMT	1900 Aug 20 12:00
    +			-11:00	-	NST	1942
    +			-11:00	US	N%sT	1946
    +			-11:00	-	NST	1967 Apr
    +			-11:00	-	BST	1969
    +			-11:00	US	B%sT	1983 Oct 30 2:00
    +			-10:00	US	AH%sT	1983 Nov 30
    +			-10:00	US	HA%sT
    +Zone Pacific/Honolulu	-10:31:26 -	LMT	1896 Jan 13 12:00 #Schmitt&Cox
    +			-10:30	-	HST	1933 Apr 30 2:00 #Laws 1933
    +			-10:30	1:00	HDT	1933 May 21 12:00 #Laws 1933+12
    +			-10:30	-	HST	1942 Feb 09 2:00 #Schmitt&Cox+2
    +			-10:30	1:00	HDT	1945 Sep 30 2:00 #Schmitt&Fox+2
    +			-10:30	US	H%sT	1947 Jun  8 2:00 #Schmitt&Fox+2
    +			-10:00	-	HST
    +Zone America/Phoenix	-7:28:18 -	LMT	1883 Nov 18 11:31:42
    +			-7:00	US	M%sT	1944 Jan  1 00:01
    +			-7:00	-	MST	1944 Apr  1 00:01
    +			-7:00	US	M%sT	1944 Oct  1 00:01
    +			-7:00	-	MST	1967
    +			-7:00	US	M%sT	1968 Mar 21
    +			-7:00	-	MST
    +Link America/Denver America/Shiprock
    +Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:15:11
    +			-8:00	US	P%sT	1923 May 13 2:00
    +			-7:00	US	M%sT	1974
    +			-7:00	-	MST	1974 Feb  3 2:00
    +			-7:00	US	M%sT
    +Rule Indianapolis 1941	only	-	Jun	22	2:00	1:00	D
    +Rule Indianapolis 1941	1954	-	Sep	lastSun	2:00	0	S
    +Rule Indianapolis 1946	1954	-	Apr	lastSun	2:00	1:00	D
    +Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
    +			-6:00	US	C%sT	1920
    +			-6:00 Indianapolis C%sT	1942
    +			-6:00	US	C%sT	1946
    +			-6:00 Indianapolis C%sT	1955 Apr 24 2:00
    +			-5:00	-	EST	1957 Sep 29 2:00
    +			-6:00	-	CST	1958 Apr 27 2:00
    +			-5:00	-	EST	1969
    +			-5:00	US	E%sT	1971
    +			-5:00	-	EST	2006
    +			-5:00	US	E%sT
    +Rule	Marengo	1951	only	-	Apr	lastSun	2:00	1:00	D
    +Rule	Marengo	1951	only	-	Sep	lastSun	2:00	0	S
    +Rule	Marengo	1954	1960	-	Apr	lastSun	2:00	1:00	D
    +Rule	Marengo	1954	1960	-	Sep	lastSun	2:00	0	S
    +Zone America/Indiana/Marengo -5:45:23 -	LMT	1883 Nov 18 12:14:37
    +			-6:00	US	C%sT	1951
    +			-6:00	Marengo	C%sT	1961 Apr 30 2:00
    +			-5:00	-	EST	1969
    +			-5:00	US	E%sT	1974 Jan  6 2:00
    +			-6:00	1:00	CDT	1974 Oct 27 2:00
    +			-5:00	US	E%sT	1976
    +			-5:00	-	EST	2006
    +			-5:00	US	E%sT
    +Rule Vincennes	1946	only	-	Apr	lastSun	2:00	1:00	D
    +Rule Vincennes	1946	only	-	Sep	lastSun	2:00	0	S
    +Rule Vincennes	1953	1954	-	Apr	lastSun	2:00	1:00	D
    +Rule Vincennes	1953	1959	-	Sep	lastSun	2:00	0	S
    +Rule Vincennes	1955	only	-	May	 1	0:00	1:00	D
    +Rule Vincennes	1956	1963	-	Apr	lastSun	2:00	1:00	D
    +Rule Vincennes	1960	only	-	Oct	lastSun	2:00	0	S
    +Rule Vincennes	1961	only	-	Sep	lastSun	2:00	0	S
    +Rule Vincennes	1962	1963	-	Oct	lastSun	2:00	0	S
    +Zone America/Indiana/Vincennes -5:50:07 - LMT	1883 Nov 18 12:09:53
    +			-6:00	US	C%sT	1946
    +			-6:00 Vincennes	C%sT	1964 Apr 26 2:00
    +			-5:00	-	EST	1969
    +			-5:00	US	E%sT	1971
    +			-5:00	-	EST	2006 Apr  2 2:00
    +			-6:00	US	C%sT	2007 Nov  4 2:00
    +			-5:00	US	E%sT
    +Rule Perry	1946	only	-	Apr	lastSun	2:00	1:00	D
    +Rule Perry	1946	only	-	Sep	lastSun	2:00	0	S
    +Rule Perry	1953	1954	-	Apr	lastSun	2:00	1:00	D
    +Rule Perry	1953	1959	-	Sep	lastSun	2:00	0	S
    +Rule Perry	1955	only	-	May	 1	0:00	1:00	D
    +Rule Perry	1956	1963	-	Apr	lastSun	2:00	1:00	D
    +Rule Perry	1960	only	-	Oct	lastSun	2:00	0	S
    +Rule Perry	1961	only	-	Sep	lastSun	2:00	0	S
    +Rule Perry	1962	1963	-	Oct	lastSun	2:00	0	S
    +Zone America/Indiana/Tell_City -5:47:03 - LMT	1883 Nov 18 12:12:57
    +			-6:00	US	C%sT	1946
    +			-6:00 Perry	C%sT	1964 Apr 26 2:00
    +			-5:00	-	EST	1969
    +			-5:00	US	E%sT	1971
    +			-5:00	-	EST	2006 Apr  2 2:00
    +			-6:00	US	C%sT
    +Rule	Pike	1955	only	-	May	 1	0:00	1:00	D
    +Rule	Pike	1955	1960	-	Sep	lastSun	2:00	0	S
    +Rule	Pike	1956	1964	-	Apr	lastSun	2:00	1:00	D
    +Rule	Pike	1961	1964	-	Oct	lastSun	2:00	0	S
    +Zone America/Indiana/Petersburg -5:49:07 - LMT	1883 Nov 18 12:10:53
    +			-6:00	US	C%sT	1955
    +			-6:00	Pike	C%sT	1965 Apr 25 2:00
    +			-5:00	-	EST	1966 Oct 30 2:00
    +			-6:00	US	C%sT	1977 Oct 30 2:00
    +			-5:00	-	EST	2006 Apr  2 2:00
    +			-6:00	US	C%sT	2007 Nov  4 2:00
    +			-5:00	US	E%sT
    +Rule	Starke	1947	1961	-	Apr	lastSun	2:00	1:00	D
    +Rule	Starke	1947	1954	-	Sep	lastSun	2:00	0	S
    +Rule	Starke	1955	1956	-	Oct	lastSun	2:00	0	S
    +Rule	Starke	1957	1958	-	Sep	lastSun	2:00	0	S
    +Rule	Starke	1959	1961	-	Oct	lastSun	2:00	0	S
    +Zone America/Indiana/Knox -5:46:30 -	LMT	1883 Nov 18 12:13:30
    +			-6:00	US	C%sT	1947
    +			-6:00	Starke	C%sT	1962 Apr 29 2:00
    +			-5:00	-	EST	1963 Oct 27 2:00
    +			-6:00	US	C%sT	1991 Oct 27 2:00
    +			-5:00	-	EST	2006 Apr  2 2:00
    +			-6:00	US	C%sT
    +Rule	Pulaski	1946	1960	-	Apr	lastSun	2:00	1:00	D
    +Rule	Pulaski	1946	1954	-	Sep	lastSun	2:00	0	S
    +Rule	Pulaski	1955	1956	-	Oct	lastSun	2:00	0	S
    +Rule	Pulaski	1957	1960	-	Sep	lastSun	2:00	0	S
    +Zone America/Indiana/Winamac -5:46:25 - LMT	1883 Nov 18 12:13:35
    +			-6:00	US	C%sT	1946
    +			-6:00	Pulaski	C%sT	1961 Apr 30 2:00
    +			-5:00	-	EST	1969
    +			-5:00	US	E%sT	1971
    +			-5:00	-	EST	2006 Apr  2 2:00
    +			-6:00	US	C%sT	2007 Mar 11 2:00
    +			-5:00	US	E%sT
    +Zone America/Indiana/Vevay -5:40:16 -	LMT	1883 Nov 18 12:19:44
    +			-6:00	US	C%sT	1954 Apr 25 2:00
    +			-5:00	-	EST	1969
    +			-5:00	US	E%sT	1973
    +			-5:00	-	EST	2006
    +			-5:00	US	E%sT
    +Rule Louisville	1921	only	-	May	1	2:00	1:00	D
    +Rule Louisville	1921	only	-	Sep	1	2:00	0	S
    +Rule Louisville	1941	1961	-	Apr	lastSun	2:00	1:00	D
    +Rule Louisville	1941	only	-	Sep	lastSun	2:00	0	S
    +Rule Louisville	1946	only	-	Jun	2	2:00	0	S
    +Rule Louisville	1950	1955	-	Sep	lastSun	2:00	0	S
    +Rule Louisville	1956	1960	-	Oct	lastSun	2:00	0	S
    +Zone America/Kentucky/Louisville -5:43:02 -	LMT	1883 Nov 18 12:16:58
    +			-6:00	US	C%sT	1921
    +			-6:00 Louisville C%sT	1942
    +			-6:00	US	C%sT	1946
    +			-6:00 Louisville C%sT	1961 Jul 23 2:00
    +			-5:00	-	EST	1968
    +			-5:00	US	E%sT	1974 Jan  6 2:00
    +			-6:00	1:00	CDT	1974 Oct 27 2:00
    +			-5:00	US	E%sT
    +Zone America/Kentucky/Monticello -5:39:24 - LMT	1883 Nov 18 12:20:36
    +			-6:00	US	C%sT	1946
    +			-6:00	-	CST	1968
    +			-6:00	US	C%sT	2000 Oct 29  2:00
    +			-5:00	US	E%sT
    +Rule	Detroit	1948	only	-	Apr	lastSun	2:00	1:00	D
    +Rule	Detroit	1948	only	-	Sep	lastSun	2:00	0	S
    +Rule	Detroit	1967	only	-	Jun	14	2:00	1:00	D
    +Rule	Detroit	1967	only	-	Oct	lastSun	2:00	0	S
    +Zone America/Detroit	-5:32:11 -	LMT	1905
    +			-6:00	-	CST	1915 May 15 2:00
    +			-5:00	-	EST	1942
    +			-5:00	US	E%sT	1946
    +			-5:00	Detroit	E%sT	1973
    +			-5:00	US	E%sT	1975
    +			-5:00	-	EST	1975 Apr 27 2:00
    +			-5:00	US	E%sT
    +Rule Menominee	1946	only	-	Apr	lastSun	2:00	1:00	D
    +Rule Menominee	1946	only	-	Sep	lastSun	2:00	0	S
    +Rule Menominee	1966	only	-	Apr	lastSun	2:00	1:00	D
    +Rule Menominee	1966	only	-	Oct	lastSun	2:00	0	S
    +Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
    +			-6:00	US	C%sT	1946
    +			-6:00 Menominee	C%sT	1969 Apr 27 2:00
    +			-5:00	-	EST	1973 Apr 29 2:00
    +			-6:00	US	C%sT
    +Rule	Canada	1918	only	-	Apr	14	2:00	1:00	D
    +Rule	Canada	1918	only	-	Oct	31	2:00	0	S
    +Rule	Canada	1942	only	-	Feb	 9	2:00	1:00	W # War
    +Rule	Canada	1945	only	-	Aug	14	23:00u	1:00	P # Peace
    +Rule	Canada	1945	only	-	Sep	30	2:00	0	S
    +Rule	Canada	1974	1986	-	Apr	lastSun	2:00	1:00	D
    +Rule	Canada	1974	2006	-	Oct	lastSun	2:00	0	S
    +Rule	Canada	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
    +Rule	Canada	2007	max	-	Mar	Sun>=8	2:00	1:00	D
    +Rule	Canada	2007	max	-	Nov	Sun>=1	2:00	0	S
    +Rule	StJohns	1917	only	-	Apr	 8	2:00	1:00	D
    +Rule	StJohns	1917	only	-	Sep	17	2:00	0	S
    +Rule	StJohns	1919	only	-	May	 5	23:00	1:00	D
    +Rule	StJohns	1919	only	-	Aug	12	23:00	0	S
    +Rule	StJohns	1920	1935	-	May	Sun>=1	23:00	1:00	D
    +Rule	StJohns	1920	1935	-	Oct	lastSun	23:00	0	S
    +Rule	StJohns	1936	1941	-	May	Mon>=9	0:00	1:00	D
    +Rule	StJohns	1936	1941	-	Oct	Mon>=2	0:00	0	S
    +Rule	StJohns	1946	1950	-	May	Sun>=8	2:00	1:00	D
    +Rule	StJohns	1946	1950	-	Oct	Sun>=2	2:00	0	S
    +Rule	StJohns	1951	1986	-	Apr	lastSun	2:00	1:00	D
    +Rule	StJohns	1951	1959	-	Sep	lastSun	2:00	0	S
    +Rule	StJohns	1960	1986	-	Oct	lastSun	2:00	0	S
    +Rule	StJohns	1987	only	-	Apr	Sun>=1	0:01	1:00	D
    +Rule	StJohns	1987	2006	-	Oct	lastSun	0:01	0	S
    +Rule	StJohns	1988	only	-	Apr	Sun>=1	0:01	2:00	DD
    +Rule	StJohns	1989	2006	-	Apr	Sun>=1	0:01	1:00	D
    +Rule	StJohns	2007	max	-	Mar	Sun>=8	0:01	1:00	D
    +Rule	StJohns	2007	max	-	Nov	Sun>=1	0:01	0	S
    +Zone America/St_Johns	-3:30:52 -	LMT	1884
    +			-3:30:52 StJohns N%sT	1918
    +			-3:30:52 Canada	N%sT	1919
    +			-3:30:52 StJohns N%sT	1935 Mar 30
    +			-3:30	StJohns	N%sT	1942 May 11
    +			-3:30	Canada	N%sT	1946
    +			-3:30	StJohns	N%sT
    +Zone America/Goose_Bay	-4:01:40 -	LMT	1884 # Happy Valley-Goose Bay
    +			-3:30:52 -	NST	1918
    +			-3:30:52 Canada N%sT	1919
    +			-3:30:52 -	NST	1935 Mar 30
    +			-3:30	-	NST	1936
    +			-3:30	StJohns	N%sT	1942 May 11
    +			-3:30	Canada	N%sT	1946
    +			-3:30	StJohns	N%sT	1966 Mar 15 2:00
    +			-4:00	StJohns	A%sT
    +Rule	Halifax	1916	only	-	Apr	 1	0:00	1:00	D
    +Rule	Halifax	1916	only	-	Oct	 1	0:00	0	S
    +Rule	Halifax	1920	only	-	May	 9	0:00	1:00	D
    +Rule	Halifax	1920	only	-	Aug	29	0:00	0	S
    +Rule	Halifax	1921	only	-	May	 6	0:00	1:00	D
    +Rule	Halifax	1921	1922	-	Sep	 5	0:00	0	S
    +Rule	Halifax	1922	only	-	Apr	30	0:00	1:00	D
    +Rule	Halifax	1923	1925	-	May	Sun>=1	0:00	1:00	D
    +Rule	Halifax	1923	only	-	Sep	 4	0:00	0	S
    +Rule	Halifax	1924	only	-	Sep	15	0:00	0	S
    +Rule	Halifax	1925	only	-	Sep	28	0:00	0	S
    +Rule	Halifax	1926	only	-	May	16	0:00	1:00	D
    +Rule	Halifax	1926	only	-	Sep	13	0:00	0	S
    +Rule	Halifax	1927	only	-	May	 1	0:00	1:00	D
    +Rule	Halifax	1927	only	-	Sep	26	0:00	0	S
    +Rule	Halifax	1928	1931	-	May	Sun>=8	0:00	1:00	D
    +Rule	Halifax	1928	only	-	Sep	 9	0:00	0	S
    +Rule	Halifax	1929	only	-	Sep	 3	0:00	0	S
    +Rule	Halifax	1930	only	-	Sep	15	0:00	0	S
    +Rule	Halifax	1931	1932	-	Sep	Mon>=24	0:00	0	S
    +Rule	Halifax	1932	only	-	May	 1	0:00	1:00	D
    +Rule	Halifax	1933	only	-	Apr	30	0:00	1:00	D
    +Rule	Halifax	1933	only	-	Oct	 2	0:00	0	S
    +Rule	Halifax	1934	only	-	May	20	0:00	1:00	D
    +Rule	Halifax	1934	only	-	Sep	16	0:00	0	S
    +Rule	Halifax	1935	only	-	Jun	 2	0:00	1:00	D
    +Rule	Halifax	1935	only	-	Sep	30	0:00	0	S
    +Rule	Halifax	1936	only	-	Jun	 1	0:00	1:00	D
    +Rule	Halifax	1936	only	-	Sep	14	0:00	0	S
    +Rule	Halifax	1937	1938	-	May	Sun>=1	0:00	1:00	D
    +Rule	Halifax	1937	1941	-	Sep	Mon>=24	0:00	0	S
    +Rule	Halifax	1939	only	-	May	28	0:00	1:00	D
    +Rule	Halifax	1940	1941	-	May	Sun>=1	0:00	1:00	D
    +Rule	Halifax	1946	1949	-	Apr	lastSun	2:00	1:00	D
    +Rule	Halifax	1946	1949	-	Sep	lastSun	2:00	0	S
    +Rule	Halifax	1951	1954	-	Apr	lastSun	2:00	1:00	D
    +Rule	Halifax	1951	1954	-	Sep	lastSun	2:00	0	S
    +Rule	Halifax	1956	1959	-	Apr	lastSun	2:00	1:00	D
    +Rule	Halifax	1956	1959	-	Sep	lastSun	2:00	0	S
    +Rule	Halifax	1962	1973	-	Apr	lastSun	2:00	1:00	D
    +Rule	Halifax	1962	1973	-	Oct	lastSun	2:00	0	S
    +Zone America/Halifax	-4:14:24 -	LMT	1902 Jun 15
    +			-4:00	Halifax	A%sT	1918
    +			-4:00	Canada	A%sT	1919
    +			-4:00	Halifax	A%sT	1942 Feb  9 2:00s
    +			-4:00	Canada	A%sT	1946
    +			-4:00	Halifax	A%sT	1974
    +			-4:00	Canada	A%sT
    +Zone America/Glace_Bay	-3:59:48 -	LMT	1902 Jun 15
    +			-4:00	Canada	A%sT	1953
    +			-4:00	Halifax	A%sT	1954
    +			-4:00	-	AST	1972
    +			-4:00	Halifax	A%sT	1974
    +			-4:00	Canada	A%sT
    +Rule	Moncton	1933	1935	-	Jun	Sun>=8	1:00	1:00	D
    +Rule	Moncton	1933	1935	-	Sep	Sun>=8	1:00	0	S
    +Rule	Moncton	1936	1938	-	Jun	Sun>=1	1:00	1:00	D
    +Rule	Moncton	1936	1938	-	Sep	Sun>=1	1:00	0	S
    +Rule	Moncton	1939	only	-	May	27	1:00	1:00	D
    +Rule	Moncton	1939	1941	-	Sep	Sat>=21	1:00	0	S
    +Rule	Moncton	1940	only	-	May	19	1:00	1:00	D
    +Rule	Moncton	1941	only	-	May	 4	1:00	1:00	D
    +Rule	Moncton	1946	1972	-	Apr	lastSun	2:00	1:00	D
    +Rule	Moncton	1946	1956	-	Sep	lastSun	2:00	0	S
    +Rule	Moncton	1957	1972	-	Oct	lastSun	2:00	0	S
    +Rule	Moncton	1993	2006	-	Apr	Sun>=1	0:01	1:00	D
    +Rule	Moncton	1993	2006	-	Oct	lastSun	0:01	0	S
    +Zone America/Moncton	-4:19:08 -	LMT	1883 Dec  9
    +			-5:00	-	EST	1902 Jun 15
    +			-4:00	Canada	A%sT	1933
    +			-4:00	Moncton	A%sT	1942
    +			-4:00	Canada	A%sT	1946
    +			-4:00	Moncton	A%sT	1973
    +			-4:00	Canada	A%sT	1993
    +			-4:00	Moncton	A%sT	2007
    +			-4:00	Canada	A%sT
    +Rule	Mont	1917	only	-	Mar	25	2:00	1:00	D
    +Rule	Mont	1917	only	-	Apr	24	0:00	0	S
    +Rule	Mont	1919	only	-	Mar	31	2:30	1:00	D
    +Rule	Mont	1919	only	-	Oct	25	2:30	0	S
    +Rule	Mont	1920	only	-	May	 2	2:30	1:00	D
    +Rule	Mont	1920	1922	-	Oct	Sun>=1	2:30	0	S
    +Rule	Mont	1921	only	-	May	 1	2:00	1:00	D
    +Rule	Mont	1922	only	-	Apr	30	2:00	1:00	D
    +Rule	Mont	1924	only	-	May	17	2:00	1:00	D
    +Rule	Mont	1924	1926	-	Sep	lastSun	2:30	0	S
    +Rule	Mont	1925	1926	-	May	Sun>=1	2:00	1:00	D
    +Rule	Mont	1927	only	-	May	1	0:00	1:00	D
    +Rule	Mont	1927	1932	-	Sep	lastSun	0:00	0	S
    +Rule	Mont	1928	1931	-	Apr	lastSun	0:00	1:00	D
    +Rule	Mont	1932	only	-	May	1	0:00	1:00	D
    +Rule	Mont	1933	1940	-	Apr	lastSun	0:00	1:00	D
    +Rule	Mont	1933	only	-	Oct	1	0:00	0	S
    +Rule	Mont	1934	1939	-	Sep	lastSun	0:00	0	S
    +Rule	Mont	1946	1973	-	Apr	lastSun	2:00	1:00	D
    +Rule	Mont	1945	1948	-	Sep	lastSun	2:00	0	S
    +Rule	Mont	1949	1950	-	Oct	lastSun	2:00	0	S
    +Rule	Mont	1951	1956	-	Sep	lastSun	2:00	0	S
    +Rule	Mont	1957	1973	-	Oct	lastSun	2:00	0	S
    +Zone America/Blanc-Sablon -3:48:28 -	LMT	1884
    +			-4:00	Canada	A%sT	1970
    +			-4:00	-	AST
    +Zone America/Montreal	-4:54:16 -	LMT	1884
    +			-5:00	Mont	E%sT	1918
    +			-5:00	Canada	E%sT	1919
    +			-5:00	Mont	E%sT	1942 Feb  9 2:00s
    +			-5:00	Canada	E%sT	1946
    +			-5:00	Mont	E%sT	1974
    +			-5:00	Canada	E%sT
    +Rule	Toronto	1919	only	-	Mar	30	23:30	1:00	D
    +Rule	Toronto	1919	only	-	Oct	26	0:00	0	S
    +Rule	Toronto	1920	only	-	May	 2	2:00	1:00	D
    +Rule	Toronto	1920	only	-	Sep	26	0:00	0	S
    +Rule	Toronto	1921	only	-	May	15	2:00	1:00	D
    +Rule	Toronto	1921	only	-	Sep	15	2:00	0	S
    +Rule	Toronto	1922	1923	-	May	Sun>=8	2:00	1:00	D
    +Rule	Toronto	1922	1926	-	Sep	Sun>=15	2:00	0	S
    +Rule	Toronto	1924	1927	-	May	Sun>=1	2:00	1:00	D
    +Rule	Toronto	1927	1932	-	Sep	lastSun	2:00	0	S
    +Rule	Toronto	1928	1931	-	Apr	lastSun	2:00	1:00	D
    +Rule	Toronto	1932	only	-	May	1	2:00	1:00	D
    +Rule	Toronto	1933	1940	-	Apr	lastSun	2:00	1:00	D
    +Rule	Toronto	1933	only	-	Oct	1	2:00	0	S
    +Rule	Toronto	1934	1939	-	Sep	lastSun	2:00	0	S
    +Rule	Toronto	1945	1946	-	Sep	lastSun	2:00	0	S
    +Rule	Toronto	1946	only	-	Apr	lastSun	2:00	1:00	D
    +Rule	Toronto	1947	1949	-	Apr	lastSun	0:00	1:00	D
    +Rule	Toronto	1947	1948	-	Sep	lastSun	0:00	0	S
    +Rule	Toronto	1949	only	-	Nov	lastSun	0:00	0	S
    +Rule	Toronto	1950	1973	-	Apr	lastSun	2:00	1:00	D
    +Rule	Toronto	1950	only	-	Nov	lastSun	2:00	0	S
    +Rule	Toronto	1951	1956	-	Sep	lastSun	2:00	0	S
    +Rule	Toronto	1957	1973	-	Oct	lastSun	2:00	0	S
    +Zone America/Toronto	-5:17:32 -	LMT	1895
    +			-5:00	Canada	E%sT	1919
    +			-5:00	Toronto	E%sT	1942 Feb  9 2:00s
    +			-5:00	Canada	E%sT	1946
    +			-5:00	Toronto	E%sT	1974
    +			-5:00	Canada	E%sT
    +Zone America/Thunder_Bay -5:57:00 -	LMT	1895
    +			-6:00	-	CST	1910
    +			-5:00	-	EST	1942
    +			-5:00	Canada	E%sT	1970
    +			-5:00	Mont	E%sT	1973
    +			-5:00	-	EST	1974
    +			-5:00	Canada	E%sT
    +Zone America/Nipigon	-5:53:04 -	LMT	1895
    +			-5:00	Canada	E%sT	1940 Sep 29
    +			-5:00	1:00	EDT	1942 Feb  9 2:00s
    +			-5:00	Canada	E%sT
    +Zone America/Rainy_River -6:18:16 -	LMT	1895
    +			-6:00	Canada	C%sT	1940 Sep 29
    +			-6:00	1:00	CDT	1942 Feb  9 2:00s
    +			-6:00	Canada	C%sT
    +Zone America/Atikokan	-6:06:28 -	LMT	1895
    +			-6:00	Canada	C%sT	1940 Sep 29
    +			-6:00	1:00	CDT	1942 Feb  9 2:00s
    +			-6:00	Canada	C%sT	1945 Sep 30 2:00
    +			-5:00	-	EST
    +Rule	Winn	1916	only	-	Apr	23	0:00	1:00	D
    +Rule	Winn	1916	only	-	Sep	17	0:00	0	S
    +Rule	Winn	1918	only	-	Apr	14	2:00	1:00	D
    +Rule	Winn	1918	only	-	Oct	31	2:00	0	S
    +Rule	Winn	1937	only	-	May	16	2:00	1:00	D
    +Rule	Winn	1937	only	-	Sep	26	2:00	0	S
    +Rule	Winn	1942	only	-	Feb	 9	2:00	1:00	W # War
    +Rule	Winn	1945	only	-	Aug	14	23:00u	1:00	P # Peace
    +Rule	Winn	1945	only	-	Sep	lastSun	2:00	0	S
    +Rule	Winn	1946	only	-	May	12	2:00	1:00	D
    +Rule	Winn	1946	only	-	Oct	13	2:00	0	S
    +Rule	Winn	1947	1949	-	Apr	lastSun	2:00	1:00	D
    +Rule	Winn	1947	1949	-	Sep	lastSun	2:00	0	S
    +Rule	Winn	1950	only	-	May	 1	2:00	1:00	D
    +Rule	Winn	1950	only	-	Sep	30	2:00	0	S
    +Rule	Winn	1951	1960	-	Apr	lastSun	2:00	1:00	D
    +Rule	Winn	1951	1958	-	Sep	lastSun	2:00	0	S
    +Rule	Winn	1959	only	-	Oct	lastSun	2:00	0	S
    +Rule	Winn	1960	only	-	Sep	lastSun	2:00	0	S
    +Rule	Winn	1963	only	-	Apr	lastSun	2:00	1:00	D
    +Rule	Winn	1963	only	-	Sep	22	2:00	0	S
    +Rule	Winn	1966	1986	-	Apr	lastSun	2:00s	1:00	D
    +Rule	Winn	1966	2005	-	Oct	lastSun	2:00s	0	S
    +Rule	Winn	1987	2005	-	Apr	Sun>=1	2:00s	1:00	D
    +Zone America/Winnipeg	-6:28:36 -	LMT	1887 Jul 16
    +			-6:00	Winn	C%sT	2006
    +			-6:00	Canada	C%sT
    +Rule	Regina	1918	only	-	Apr	14	2:00	1:00	D
    +Rule	Regina	1918	only	-	Oct	31	2:00	0	S
    +Rule	Regina	1930	1934	-	May	Sun>=1	0:00	1:00	D
    +Rule	Regina	1930	1934	-	Oct	Sun>=1	0:00	0	S
    +Rule	Regina	1937	1941	-	Apr	Sun>=8	0:00	1:00	D
    +Rule	Regina	1937	only	-	Oct	Sun>=8	0:00	0	S
    +Rule	Regina	1938	only	-	Oct	Sun>=1	0:00	0	S
    +Rule	Regina	1939	1941	-	Oct	Sun>=8	0:00	0	S
    +Rule	Regina	1942	only	-	Feb	 9	2:00	1:00	W # War
    +Rule	Regina	1945	only	-	Aug	14	23:00u	1:00	P # Peace
    +Rule	Regina	1945	only	-	Sep	lastSun	2:00	0	S
    +Rule	Regina	1946	only	-	Apr	Sun>=8	2:00	1:00	D
    +Rule	Regina	1946	only	-	Oct	Sun>=8	2:00	0	S
    +Rule	Regina	1947	1957	-	Apr	lastSun	2:00	1:00	D
    +Rule	Regina	1947	1957	-	Sep	lastSun	2:00	0	S
    +Rule	Regina	1959	only	-	Apr	lastSun	2:00	1:00	D
    +Rule	Regina	1959	only	-	Oct	lastSun	2:00	0	S
    +Rule	Swift	1957	only	-	Apr	lastSun	2:00	1:00	D
    +Rule	Swift	1957	only	-	Oct	lastSun	2:00	0	S
    +Rule	Swift	1959	1961	-	Apr	lastSun	2:00	1:00	D
    +Rule	Swift	1959	only	-	Oct	lastSun	2:00	0	S
    +Rule	Swift	1960	1961	-	Sep	lastSun	2:00	0	S
    +Zone America/Regina	-6:58:36 -	LMT	1905 Sep
    +			-7:00	Regina	M%sT	1960 Apr lastSun 2:00
    +			-6:00	-	CST
    +Zone America/Swift_Current -7:11:20 -	LMT	1905 Sep
    +			-7:00	Canada	M%sT	1946 Apr lastSun 2:00
    +			-7:00	Regina	M%sT	1950
    +			-7:00	Swift	M%sT	1972 Apr lastSun 2:00
    +			-6:00	-	CST
    +Rule	Edm	1918	1919	-	Apr	Sun>=8	2:00	1:00	D
    +Rule	Edm	1918	only	-	Oct	31	2:00	0	S
    +Rule	Edm	1919	only	-	May	27	2:00	0	S
    +Rule	Edm	1920	1923	-	Apr	lastSun	2:00	1:00	D
    +Rule	Edm	1920	only	-	Oct	lastSun	2:00	0	S
    +Rule	Edm	1921	1923	-	Sep	lastSun	2:00	0	S
    +Rule	Edm	1942	only	-	Feb	 9	2:00	1:00	W # War
    +Rule	Edm	1945	only	-	Aug	14	23:00u	1:00	P # Peace
    +Rule	Edm	1945	only	-	Sep	lastSun	2:00	0	S
    +Rule	Edm	1947	only	-	Apr	lastSun	2:00	1:00	D
    +Rule	Edm	1947	only	-	Sep	lastSun	2:00	0	S
    +Rule	Edm	1967	only	-	Apr	lastSun	2:00	1:00	D
    +Rule	Edm	1967	only	-	Oct	lastSun	2:00	0	S
    +Rule	Edm	1969	only	-	Apr	lastSun	2:00	1:00	D
    +Rule	Edm	1969	only	-	Oct	lastSun	2:00	0	S
    +Rule	Edm	1972	1986	-	Apr	lastSun	2:00	1:00	D
    +Rule	Edm	1972	2006	-	Oct	lastSun	2:00	0	S
    +Zone America/Edmonton	-7:33:52 -	LMT	1906 Sep
    +			-7:00	Edm	M%sT	1987
    +			-7:00	Canada	M%sT
    +Rule	Vanc	1918	only	-	Apr	14	2:00	1:00	D
    +Rule	Vanc	1918	only	-	Oct	31	2:00	0	S
    +Rule	Vanc	1942	only	-	Feb	 9	2:00	1:00	W # War
    +Rule	Vanc	1945	only	-	Aug	14	23:00u	1:00	P # Peace
    +Rule	Vanc	1945	only	-	Sep	30	2:00	0	S
    +Rule	Vanc	1946	1986	-	Apr	lastSun	2:00	1:00	D
    +Rule	Vanc	1946	only	-	Oct	13	2:00	0	S
    +Rule	Vanc	1947	1961	-	Sep	lastSun	2:00	0	S
    +Rule	Vanc	1962	2006	-	Oct	lastSun	2:00	0	S
    +Zone America/Vancouver	-8:12:28 -	LMT	1884
    +			-8:00	Vanc	P%sT	1987
    +			-8:00	Canada	P%sT
    +Zone America/Dawson_Creek -8:00:56 -	LMT	1884
    +			-8:00	Canada	P%sT	1947
    +			-8:00	Vanc	P%sT	1972 Aug 30 2:00
    +			-7:00	-	MST
    +Rule	NT_YK	1918	only	-	Apr	14	2:00	1:00	D
    +Rule	NT_YK	1918	only	-	Oct	27	2:00	0	S
    +Rule	NT_YK	1919	only	-	May	25	2:00	1:00	D
    +Rule	NT_YK	1919	only	-	Nov	 1	0:00	0	S
    +Rule	NT_YK	1942	only	-	Feb	 9	2:00	1:00	W # War
    +Rule	NT_YK	1945	only	-	Aug	14	23:00u	1:00	P # Peace
    +Rule	NT_YK	1945	only	-	Sep	30	2:00	0	S
    +Rule	NT_YK	1965	only	-	Apr	lastSun	0:00	2:00	DD
    +Rule	NT_YK	1965	only	-	Oct	lastSun	2:00	0	S
    +Rule	NT_YK	1980	1986	-	Apr	lastSun	2:00	1:00	D
    +Rule	NT_YK	1980	2006	-	Oct	lastSun	2:00	0	S
    +Rule	NT_YK	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
    +Zone America/Pangnirtung 0	-	zzz	1921 # trading post est.
    +			-4:00	NT_YK	A%sT	1995 Apr Sun>=1 2:00
    +			-5:00	Canada	E%sT	1999 Oct 31 2:00
    +			-6:00	Canada	C%sT	2000 Oct 29 2:00
    +			-5:00	Canada	E%sT
    +Zone America/Iqaluit	0	-	zzz	1942 Aug # Frobisher Bay est.
    +			-5:00	NT_YK	E%sT	1999 Oct 31 2:00
    +			-6:00	Canada	C%sT	2000 Oct 29 2:00
    +			-5:00	Canada	E%sT
    +Rule	Resolute 2006	max	-	Nov	Sun>=1	2:00	0	ES
    +Rule	Resolute 2007	max	-	Mar	Sun>=8	2:00	0	CD
    +Zone America/Resolute	0	-	zzz	1947 Aug 31 # Resolute founded
    +			-6:00	NT_YK	C%sT	2000 Oct 29 2:00
    +			-5:00	-	EST	2001 Apr  1 3:00
    +			-6:00	Canada	C%sT	2006 Oct 29 2:00
    +			-5:00	Resolute	%sT
    +Zone America/Rankin_Inlet 0	-	zzz	1957 # Rankin Inlet founded
    +			-6:00	NT_YK	C%sT	2000 Oct 29 2:00
    +			-5:00	-	EST	2001 Apr  1 3:00
    +			-6:00	Canada	C%sT
    +Zone America/Cambridge_Bay 0	-	zzz	1920 # trading post est.?
    +			-7:00	NT_YK	M%sT	1999 Oct 31 2:00
    +			-6:00	Canada	C%sT	2000 Oct 29 2:00
    +			-5:00	-	EST	2000 Nov  5 0:00
    +			-6:00	-	CST	2001 Apr  1 3:00
    +			-7:00	Canada	M%sT
    +Zone America/Yellowknife 0	-	zzz	1935 # Yellowknife founded?
    +			-7:00	NT_YK	M%sT	1980
    +			-7:00	Canada	M%sT
    +Zone America/Inuvik	0	-	zzz	1953 # Inuvik founded
    +			-8:00	NT_YK	P%sT	1979 Apr lastSun 2:00
    +			-7:00	NT_YK	M%sT	1980
    +			-7:00	Canada	M%sT
    +Zone America/Whitehorse	-9:00:12 -	LMT	1900 Aug 20
    +			-9:00	NT_YK	Y%sT	1966 Jul 1 2:00
    +			-8:00	NT_YK	P%sT	1980
    +			-8:00	Canada	P%sT
    +Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
    +			-9:00	NT_YK	Y%sT	1973 Oct 28 0:00
    +			-8:00	NT_YK	P%sT	1980
    +			-8:00	Canada	P%sT
    +Rule	Mexico	1939	only	-	Feb	5	0:00	1:00	D
    +Rule	Mexico	1939	only	-	Jun	25	0:00	0	S
    +Rule	Mexico	1940	only	-	Dec	9	0:00	1:00	D
    +Rule	Mexico	1941	only	-	Apr	1	0:00	0	S
    +Rule	Mexico	1943	only	-	Dec	16	0:00	1:00	W # War
    +Rule	Mexico	1944	only	-	May	1	0:00	0	S
    +Rule	Mexico	1950	only	-	Feb	12	0:00	1:00	D
    +Rule	Mexico	1950	only	-	Jul	30	0:00	0	S
    +Rule	Mexico	1996	2000	-	Apr	Sun>=1	2:00	1:00	D
    +Rule	Mexico	1996	2000	-	Oct	lastSun	2:00	0	S
    +Rule	Mexico	2001	only	-	May	Sun>=1	2:00	1:00	D
    +Rule	Mexico	2001	only	-	Sep	lastSun	2:00	0	S
    +Rule	Mexico	2002	max	-	Apr	Sun>=1	2:00	1:00	D
    +Rule	Mexico	2002	max	-	Oct	lastSun	2:00	0	S
    +Zone America/Cancun	-5:47:04 -	LMT	1922 Jan  1  0:12:56
    +			-6:00	-	CST	1981 Dec 23
    +			-5:00	Mexico	E%sT	1998 Aug  2  2:00
    +			-6:00	Mexico	C%sT
    +Zone America/Merida	-5:58:28 -	LMT	1922 Jan  1  0:01:32
    +			-6:00	-	CST	1981 Dec 23
    +			-5:00	-	EST	1982 Dec  2
    +			-6:00	Mexico	C%sT
    +Zone America/Matamoros	-6:40:00 -	LMT	1921 Dec 31 23:20:00
    +			-6:00	-	CST	1988
    +			-6:00	US	C%sT	1989
    +			-6:00	Mexico	C%sT	2010
    +			-6:00	US	C%sT
    +Zone America/Monterrey	-6:41:16 -	LMT	1921 Dec 31 23:18:44
    +			-6:00	-	CST	1988
    +			-6:00	US	C%sT	1989
    +			-6:00	Mexico	C%sT
    +Zone America/Mexico_City -6:36:36 -	LMT	1922 Jan  1 0:23:24
    +			-7:00	-	MST	1927 Jun 10 23:00
    +			-6:00	-	CST	1930 Nov 15
    +			-7:00	-	MST	1931 May  1 23:00
    +			-6:00	-	CST	1931 Oct
    +			-7:00	-	MST	1932 Apr  1
    +			-6:00	Mexico	C%sT	2001 Sep 30 02:00
    +			-6:00	-	CST	2002 Feb 20
    +			-6:00	Mexico	C%sT
    +Zone America/Ojinaga	-6:57:40 -	LMT	1922 Jan 1 0:02:20
    +			-7:00	-	MST	1927 Jun 10 23:00
    +			-6:00	-	CST	1930 Nov 15
    +			-7:00	-	MST	1931 May  1 23:00
    +			-6:00	-	CST	1931 Oct
    +			-7:00	-	MST	1932 Apr  1
    +			-6:00	-	CST	1996
    +			-6:00	Mexico	C%sT	1998
    +			-6:00	-	CST	1998 Apr Sun>=1 3:00
    +			-7:00	Mexico	M%sT	2010
    +			-7:00	US	M%sT
    +Zone America/Chihuahua	-7:04:20 -	LMT	1921 Dec 31 23:55:40
    +			-7:00	-	MST	1927 Jun 10 23:00
    +			-6:00	-	CST	1930 Nov 15
    +			-7:00	-	MST	1931 May  1 23:00
    +			-6:00	-	CST	1931 Oct
    +			-7:00	-	MST	1932 Apr  1
    +			-6:00	-	CST	1996
    +			-6:00	Mexico	C%sT	1998
    +			-6:00	-	CST	1998 Apr Sun>=1 3:00
    +			-7:00	Mexico	M%sT
    +Zone America/Hermosillo	-7:23:52 -	LMT	1921 Dec 31 23:36:08
    +			-7:00	-	MST	1927 Jun 10 23:00
    +			-6:00	-	CST	1930 Nov 15
    +			-7:00	-	MST	1931 May  1 23:00
    +			-6:00	-	CST	1931 Oct
    +			-7:00	-	MST	1932 Apr  1
    +			-6:00	-	CST	1942 Apr 24
    +			-7:00	-	MST	1949 Jan 14
    +			-8:00	-	PST	1970
    +			-7:00	Mexico	M%sT	1999
    +			-7:00	-	MST
    +Zone America/Mazatlan	-7:05:40 -	LMT	1921 Dec 31 23:54:20
    +			-7:00	-	MST	1927 Jun 10 23:00
    +			-6:00	-	CST	1930 Nov 15
    +			-7:00	-	MST	1931 May  1 23:00
    +			-6:00	-	CST	1931 Oct
    +			-7:00	-	MST	1932 Apr  1
    +			-6:00	-	CST	1942 Apr 24
    +			-7:00	-	MST	1949 Jan 14
    +			-8:00	-	PST	1970
    +			-7:00	Mexico	M%sT
    +Zone America/Bahia_Banderas	-7:01:00 -	LMT	1921 Dec 31 23:59:00
    +			-7:00	-	MST	1927 Jun 10 23:00
    +			-6:00	-	CST	1930 Nov 15
    +			-7:00	-	MST	1931 May  1 23:00
    +			-6:00	-	CST	1931 Oct
    +			-7:00	-	MST	1932 Apr  1
    +			-6:00	-	CST	1942 Apr 24
    +			-7:00	-	MST	1949 Jan 14
    +			-8:00	-	PST	1970
    +			-7:00	Mexico	M%sT	2010 Apr 4 2:00
    +			-6:00	Mexico	C%sT
    +Zone America/Tijuana	-7:48:04 -	LMT	1922 Jan  1  0:11:56
    +			-7:00	-	MST	1924
    +			-8:00	-	PST	1927 Jun 10 23:00
    +			-7:00	-	MST	1930 Nov 15
    +			-8:00	-	PST	1931 Apr  1
    +			-8:00	1:00	PDT	1931 Sep 30
    +			-8:00	-	PST	1942 Apr 24
    +			-8:00	1:00	PWT	1945 Aug 14 23:00u
    +			-8:00	1:00	PPT	1945 Nov 12 # Peace
    +			-8:00	-	PST	1948 Apr  5
    +			-8:00	1:00	PDT	1949 Jan 14
    +			-8:00	-	PST	1954
    +			-8:00	CA	P%sT	1961
    +			-8:00	-	PST	1976
    +			-8:00	US	P%sT	1996
    +			-8:00	Mexico	P%sT	2001
    +			-8:00	US	P%sT	2002 Feb 20
    +			-8:00	Mexico	P%sT	2010
    +			-8:00	US	P%sT
    +Zone America/Santa_Isabel	-7:39:28 -	LMT	1922 Jan  1  0:20:32
    +			-7:00	-	MST	1924
    +			-8:00	-	PST	1927 Jun 10 23:00
    +			-7:00	-	MST	1930 Nov 15
    +			-8:00	-	PST	1931 Apr  1
    +			-8:00	1:00	PDT	1931 Sep 30
    +			-8:00	-	PST	1942 Apr 24
    +			-8:00	1:00	PWT	1945 Aug 14 23:00u
    +			-8:00	1:00	PPT	1945 Nov 12 # Peace
    +			-8:00	-	PST	1948 Apr  5
    +			-8:00	1:00	PDT	1949 Jan 14
    +			-8:00	-	PST	1954
    +			-8:00	CA	P%sT	1961
    +			-8:00	-	PST	1976
    +			-8:00	US	P%sT	1996
    +			-8:00	Mexico	P%sT	2001
    +			-8:00	US	P%sT	2002 Feb 20
    +			-8:00	Mexico	P%sT
    +Zone America/Anguilla	-4:12:16 -	LMT	1912 Mar 2
    +			-4:00	-	AST
    +Zone	America/Antigua	-4:07:12 -	LMT	1912 Mar 2
    +			-5:00	-	EST	1951
    +			-4:00	-	AST
    +Rule	Bahamas	1964	1975	-	Oct	lastSun	2:00	0	S
    +Rule	Bahamas	1964	1975	-	Apr	lastSun	2:00	1:00	D
    +Zone	America/Nassau	-5:09:24 -	LMT	1912 Mar 2
    +			-5:00	Bahamas	E%sT	1976
    +			-5:00	US	E%sT
    +Rule	Barb	1977	only	-	Jun	12	2:00	1:00	D
    +Rule	Barb	1977	1978	-	Oct	Sun>=1	2:00	0	S
    +Rule	Barb	1978	1980	-	Apr	Sun>=15	2:00	1:00	D
    +Rule	Barb	1979	only	-	Sep	30	2:00	0	S
    +Rule	Barb	1980	only	-	Sep	25	2:00	0	S
    +Zone America/Barbados	-3:58:28 -	LMT	1924		# Bridgetown
    +			-3:58:28 -	BMT	1932	  # Bridgetown Mean Time
    +			-4:00	Barb	A%sT
    +Rule	Belize	1918	1942	-	Oct	Sun>=2	0:00	0:30	HD
    +Rule	Belize	1919	1943	-	Feb	Sun>=9	0:00	0	S
    +Rule	Belize	1973	only	-	Dec	 5	0:00	1:00	D
    +Rule	Belize	1974	only	-	Feb	 9	0:00	0	S
    +Rule	Belize	1982	only	-	Dec	18	0:00	1:00	D
    +Rule	Belize	1983	only	-	Feb	12	0:00	0	S
    +Zone	America/Belize	-5:52:48 -	LMT	1912 Apr
    +			-6:00	Belize	C%sT
    +Zone Atlantic/Bermuda	-4:19:04 -	LMT	1930 Jan  1 2:00    # Hamilton
    +			-4:00	-	AST	1974 Apr 28 2:00
    +			-4:00	Bahamas	A%sT	1976
    +			-4:00	US	A%sT
    +Zone	America/Cayman	-5:25:32 -	LMT	1890		# Georgetown
    +			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
    +			-5:00	-	EST
    +Rule	CR	1979	1980	-	Feb	lastSun	0:00	1:00	D
    +Rule	CR	1979	1980	-	Jun	Sun>=1	0:00	0	S
    +Rule	CR	1991	1992	-	Jan	Sat>=15	0:00	1:00	D
    +Rule	CR	1991	only	-	Jul	 1	0:00	0	S
    +Rule	CR	1992	only	-	Mar	15	0:00	0	S
    +Zone America/Costa_Rica	-5:36:20 -	LMT	1890		# San Jose
    +			-5:36:20 -	SJMT	1921 Jan 15 # San Jose Mean Time
    +			-6:00	CR	C%sT
    +Rule	Cuba	1928	only	-	Jun	10	0:00	1:00	D
    +Rule	Cuba	1928	only	-	Oct	10	0:00	0	S
    +Rule	Cuba	1940	1942	-	Jun	Sun>=1	0:00	1:00	D
    +Rule	Cuba	1940	1942	-	Sep	Sun>=1	0:00	0	S
    +Rule	Cuba	1945	1946	-	Jun	Sun>=1	0:00	1:00	D
    +Rule	Cuba	1945	1946	-	Sep	Sun>=1	0:00	0	S
    +Rule	Cuba	1965	only	-	Jun	1	0:00	1:00	D
    +Rule	Cuba	1965	only	-	Sep	30	0:00	0	S
    +Rule	Cuba	1966	only	-	May	29	0:00	1:00	D
    +Rule	Cuba	1966	only	-	Oct	2	0:00	0	S
    +Rule	Cuba	1967	only	-	Apr	8	0:00	1:00	D
    +Rule	Cuba	1967	1968	-	Sep	Sun>=8	0:00	0	S
    +Rule	Cuba	1968	only	-	Apr	14	0:00	1:00	D
    +Rule	Cuba	1969	1977	-	Apr	lastSun	0:00	1:00	D
    +Rule	Cuba	1969	1971	-	Oct	lastSun	0:00	0	S
    +Rule	Cuba	1972	1974	-	Oct	8	0:00	0	S
    +Rule	Cuba	1975	1977	-	Oct	lastSun	0:00	0	S
    +Rule	Cuba	1978	only	-	May	7	0:00	1:00	D
    +Rule	Cuba	1978	1990	-	Oct	Sun>=8	0:00	0	S
    +Rule	Cuba	1979	1980	-	Mar	Sun>=15	0:00	1:00	D
    +Rule	Cuba	1981	1985	-	May	Sun>=5	0:00	1:00	D
    +Rule	Cuba	1986	1989	-	Mar	Sun>=14	0:00	1:00	D
    +Rule	Cuba	1990	1997	-	Apr	Sun>=1	0:00	1:00	D
    +Rule	Cuba	1991	1995	-	Oct	Sun>=8	0:00s	0	S
    +Rule	Cuba	1996	only	-	Oct	 6	0:00s	0	S
    +Rule	Cuba	1997	only	-	Oct	12	0:00s	0	S
    +Rule	Cuba	1998	1999	-	Mar	lastSun	0:00s	1:00	D
    +Rule	Cuba	1998	2003	-	Oct	lastSun	0:00s	0	S
    +Rule	Cuba	2000	2004	-	Apr	Sun>=1	0:00s	1:00	D
    +Rule	Cuba	2006	max	-	Oct	lastSun	0:00s	0	S
    +Rule	Cuba	2007	only	-	Mar	Sun>=8	0:00s	1:00	D
    +Rule	Cuba	2008	only	-	Mar	Sun>=15	0:00s	1:00	D
    +Rule	Cuba	2009	2010	-	Mar	Sun>=8	0:00s	1:00	D
    +Rule	Cuba	2011	only	-	Mar	Sun>=15	0:00s	1:00	D
    +Rule	Cuba	2012	max	-	Mar	Sun>=8	0:00s	1:00	D
    +Zone	America/Havana	-5:29:28 -	LMT	1890
    +			-5:29:36 -	HMT	1925 Jul 19 12:00 # Havana MT
    +			-5:00	Cuba	C%sT
    +Zone America/Dominica	-4:05:36 -	LMT	1911 Jul 1 0:01		# Roseau
    +			-4:00	-	AST
    +Rule	DR	1966	only	-	Oct	30	0:00	1:00	D
    +Rule	DR	1967	only	-	Feb	28	0:00	0	S
    +Rule	DR	1969	1973	-	Oct	lastSun	0:00	0:30	HD
    +Rule	DR	1970	only	-	Feb	21	0:00	0	S
    +Rule	DR	1971	only	-	Jan	20	0:00	0	S
    +Rule	DR	1972	1974	-	Jan	21	0:00	0	S
    +Zone America/Santo_Domingo -4:39:36 -	LMT	1890
    +			-4:40	-	SDMT	1933 Apr  1 12:00 # S. Dom. MT
    +			-5:00	DR	E%sT	1974 Oct 27
    +			-4:00	-	AST	2000 Oct 29 02:00
    +			-5:00	US	E%sT	2000 Dec  3 01:00
    +			-4:00	-	AST
    +Rule	Salv	1987	1988	-	May	Sun>=1	0:00	1:00	D
    +Rule	Salv	1987	1988	-	Sep	lastSun	0:00	0	S
    +Zone America/El_Salvador -5:56:48 -	LMT	1921		# San Salvador
    +			-6:00	Salv	C%sT
    +Zone	America/Grenada	-4:07:00 -	LMT	1911 Jul	# St George's
    +			-4:00	-	AST
    +Zone America/Guadeloupe	-4:06:08 -	LMT	1911 Jun 8	# Pointe a Pitre
    +			-4:00	-	AST
    +Link America/Guadeloupe	America/St_Barthelemy
    +Link America/Guadeloupe	America/Marigot
    +Rule	Guat	1973	only	-	Nov	25	0:00	1:00	D
    +Rule	Guat	1974	only	-	Feb	24	0:00	0	S
    +Rule	Guat	1983	only	-	May	21	0:00	1:00	D
    +Rule	Guat	1983	only	-	Sep	22	0:00	0	S
    +Rule	Guat	1991	only	-	Mar	23	0:00	1:00	D
    +Rule	Guat	1991	only	-	Sep	 7	0:00	0	S
    +Rule	Guat	2006	only	-	Apr	30	0:00	1:00	D
    +Rule	Guat	2006	only	-	Oct	 1	0:00	0	S
    +Zone America/Guatemala	-6:02:04 -	LMT	1918 Oct 5
    +			-6:00	Guat	C%sT
    +Rule	Haiti	1983	only	-	May	8	0:00	1:00	D
    +Rule	Haiti	1984	1987	-	Apr	lastSun	0:00	1:00	D
    +Rule	Haiti	1983	1987	-	Oct	lastSun	0:00	0	S
    +Rule	Haiti	1988	1997	-	Apr	Sun>=1	1:00s	1:00	D
    +Rule	Haiti	1988	1997	-	Oct	lastSun	1:00s	0	S
    +Rule	Haiti	2005	2006	-	Apr	Sun>=1	0:00	1:00	D
    +Rule	Haiti	2005	2006	-	Oct	lastSun	0:00	0	S
    +Zone America/Port-au-Prince -4:49:20 -	LMT	1890
    +			-4:49	-	PPMT	1917 Jan 24 12:00 # P-a-P MT
    +			-5:00	Haiti	E%sT
    +Rule	Hond	1987	1988	-	May	Sun>=1	0:00	1:00	D
    +Rule	Hond	1987	1988	-	Sep	lastSun	0:00	0	S
    +Rule	Hond	2006	only	-	May	Sun>=1	0:00	1:00	D
    +Rule	Hond	2006	only	-	Aug	Mon>=1	0:00	0	S
    +Zone America/Tegucigalpa -5:48:52 -	LMT	1921 Apr
    +			-6:00	Hond	C%sT
    +Zone	America/Jamaica	-5:07:12 -	LMT	1890		# Kingston
    +			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
    +			-5:00	-	EST	1974 Apr 28 2:00
    +			-5:00	US	E%sT	1984
    +			-5:00	-	EST
    +Zone America/Martinique	-4:04:20 -      LMT	1890		# Fort-de-France
    +			-4:04:20 -	FFMT	1911 May     # Fort-de-France MT
    +			-4:00	-	AST	1980 Apr  6
    +			-4:00	1:00	ADT	1980 Sep 28
    +			-4:00	-	AST
    +Zone America/Montserrat	-4:08:52 -	LMT	1911 Jul 1 0:01   # Cork Hill
    +			-4:00	-	AST
    +Rule	Nic	1979	1980	-	Mar	Sun>=16	0:00	1:00	D
    +Rule	Nic	1979	1980	-	Jun	Mon>=23	0:00	0	S
    +Rule	Nic	2005	only	-	Apr	10	0:00	1:00	D
    +Rule	Nic	2005	only	-	Oct	Sun>=1	0:00	0	S
    +Rule	Nic	2006	only	-	Apr	30	2:00	1:00	D
    +Rule	Nic	2006	only	-	Oct	Sun>=1	1:00	0	S
    +Zone	America/Managua	-5:45:08 -	LMT	1890
    +			-5:45:12 -	MMT	1934 Jun 23 # Managua Mean Time?
    +			-6:00	-	CST	1973 May
    +			-5:00	-	EST	1975 Feb 16
    +			-6:00	Nic	C%sT	1992 Jan  1 4:00
    +			-5:00	-	EST	1992 Sep 24
    +			-6:00	-	CST	1993
    +			-5:00	-	EST	1997
    +			-6:00	Nic	C%sT
    +Zone	America/Panama	-5:18:08 -	LMT	1890
    +			-5:19:36 -	CMT	1908 Apr 22   # Colon Mean Time
    +			-5:00	-	EST
    +Zone America/Puerto_Rico -4:24:25 -	LMT	1899 Mar 28 12:00    # San Juan
    +			-4:00	-	AST	1942 May  3
    +			-4:00	US	A%sT	1946
    +			-4:00	-	AST
    +Zone America/St_Kitts	-4:10:52 -	LMT	1912 Mar 2	# Basseterre
    +			-4:00	-	AST
    +Zone America/St_Lucia	-4:04:00 -	LMT	1890		# Castries
    +			-4:04:00 -	CMT	1912	    # Castries Mean Time
    +			-4:00	-	AST
    +Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15	# St Pierre
    +			-4:00	-	AST	1980 May
    +			-3:00	-	PMST	1987 # Pierre & Miquelon Time
    +			-3:00	Canada	PM%sT
    +Zone America/St_Vincent	-4:04:56 -	LMT	1890		# Kingstown
    +			-4:04:56 -	KMT	1912	   # Kingstown Mean Time
    +			-4:00	-	AST
    +Rule	TC	1979	1986	-	Apr	lastSun	2:00	1:00	D
    +Rule	TC	1979	2006	-	Oct	lastSun	2:00	0	S
    +Rule	TC	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
    +Rule	TC	2007	max	-	Mar	Sun>=8	2:00	1:00	D
    +Rule	TC	2007	max	-	Nov	Sun>=1	2:00	0	S
    +Zone America/Grand_Turk	-4:44:32 -	LMT	1890
    +			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
    +			-5:00	TC	E%sT
    +Zone America/Tortola	-4:18:28 -	LMT	1911 Jul    # Road Town
    +			-4:00	-	AST
    +Zone America/St_Thomas	-4:19:44 -	LMT	1911 Jul    # Charlotte Amalie
    +			-4:00	-	AST
    diff --git a/examples/tz/pacificnew b/examples/tz/pacificnew
    new file mode 100644
    index 0000000..e2512c1
    --- /dev/null
    +++ b/examples/tz/pacificnew
    @@ -0,0 +1,29 @@
    +# 
    +# @(#)pacificnew	8.2
    +# This file is in the public domain, so clarified as of
    +# 2009-05-17 by Arthur David Olson.
    +
    +# From Arthur David Olson (1989-04-05):
    +# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill
    +# establishing "Pacific Presidential Election Time"; it was not acted on
    +# by the Senate or signed into law by the President.
    +# You might want to change the "PE" (Presidential Election) below to
    +# "Q" (Quadrennial) to maintain three-character zone abbreviations.
    +# If you're really conservative, you might want to change it to "D".
    +# Avoid "L" (Leap Year), which won't be true in 2100.
    +
    +# If Presidential Election Time is ever established, replace "XXXX" below
    +# with the year the law takes effect and uncomment the "##" lines.
    +
    +# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    +## Rule	Twilite	XXXX	max	-	Apr	Sun>=1	2:00	1:00	D
    +## Rule	Twilite	XXXX	max	uspres	Oct	lastSun	2:00	1:00	PE
    +## Rule	Twilite	XXXX	max	uspres	Nov	Sun>=7	2:00	0	S
    +## Rule	Twilite	XXXX	max	nonpres	Oct	lastSun	2:00	0	S
    +
    +# Zone	NAME			GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
    +## Zone	America/Los_Angeles-PET	-8:00	US		P%sT	XXXX
    +##				-8:00	Twilite		P%sT
    +
    +# For now...
    +Link	America/Los_Angeles	US/Pacific-New	##
    diff --git a/examples/tz/solar87 b/examples/tz/solar87
    new file mode 100644
    index 0000000..47ee7e7
    --- /dev/null
    +++ b/examples/tz/solar87
    @@ -0,0 +1,391 @@
    +# 
    +# @(#)solar87	8.2
    +# This file is in the public domain, so clarified as of
    +# 2009-05-17 by Arthur David Olson.
    +
    +# So much for footnotes about Saudi Arabia.
    +# Apparent noon times below are for Riyadh; your mileage will vary.
    +# Times were computed using formulas in the U.S. Naval Observatory's
    +# Almanac for Computers 1987; the formulas "will give EqT to an accuracy of
    +# [plus or minus two] seconds during the current year."
    +#
    +# Rounding to the nearest five seconds results in fewer than
    +# 256 different "time types"--a limit that's faced because time types are
    +# stored on disk as unsigned chars.
    +
    +# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    +Rule	sol87	1987	only	-	Jan	1	12:03:20s -0:03:20 -
    +Rule	sol87	1987	only	-	Jan	2	12:03:50s -0:03:50 -
    +Rule	sol87	1987	only	-	Jan	3	12:04:15s -0:04:15 -
    +Rule	sol87	1987	only	-	Jan	4	12:04:45s -0:04:45 -
    +Rule	sol87	1987	only	-	Jan	5	12:05:10s -0:05:10 -
    +Rule	sol87	1987	only	-	Jan	6	12:05:40s -0:05:40 -
    +Rule	sol87	1987	only	-	Jan	7	12:06:05s -0:06:05 -
    +Rule	sol87	1987	only	-	Jan	8	12:06:30s -0:06:30 -
    +Rule	sol87	1987	only	-	Jan	9	12:06:55s -0:06:55 -
    +Rule	sol87	1987	only	-	Jan	10	12:07:20s -0:07:20 -
    +Rule	sol87	1987	only	-	Jan	11	12:07:45s -0:07:45 -
    +Rule	sol87	1987	only	-	Jan	12	12:08:10s -0:08:10 -
    +Rule	sol87	1987	only	-	Jan	13	12:08:30s -0:08:30 -
    +Rule	sol87	1987	only	-	Jan	14	12:08:55s -0:08:55 -
    +Rule	sol87	1987	only	-	Jan	15	12:09:15s -0:09:15 -
    +Rule	sol87	1987	only	-	Jan	16	12:09:35s -0:09:35 -
    +Rule	sol87	1987	only	-	Jan	17	12:09:55s -0:09:55 -
    +Rule	sol87	1987	only	-	Jan	18	12:10:15s -0:10:15 -
    +Rule	sol87	1987	only	-	Jan	19	12:10:35s -0:10:35 -
    +Rule	sol87	1987	only	-	Jan	20	12:10:55s -0:10:55 -
    +Rule	sol87	1987	only	-	Jan	21	12:11:10s -0:11:10 -
    +Rule	sol87	1987	only	-	Jan	22	12:11:30s -0:11:30 -
    +Rule	sol87	1987	only	-	Jan	23	12:11:45s -0:11:45 -
    +Rule	sol87	1987	only	-	Jan	24	12:12:00s -0:12:00 -
    +Rule	sol87	1987	only	-	Jan	25	12:12:15s -0:12:15 -
    +Rule	sol87	1987	only	-	Jan	26	12:12:30s -0:12:30 -
    +Rule	sol87	1987	only	-	Jan	27	12:12:40s -0:12:40 -
    +Rule	sol87	1987	only	-	Jan	28	12:12:55s -0:12:55 -
    +Rule	sol87	1987	only	-	Jan	29	12:13:05s -0:13:05 -
    +Rule	sol87	1987	only	-	Jan	30	12:13:15s -0:13:15 -
    +Rule	sol87	1987	only	-	Jan	31	12:13:25s -0:13:25 -
    +Rule	sol87	1987	only	-	Feb	1	12:13:35s -0:13:35 -
    +Rule	sol87	1987	only	-	Feb	2	12:13:40s -0:13:40 -
    +Rule	sol87	1987	only	-	Feb	3	12:13:50s -0:13:50 -
    +Rule	sol87	1987	only	-	Feb	4	12:13:55s -0:13:55 -
    +Rule	sol87	1987	only	-	Feb	5	12:14:00s -0:14:00 -
    +Rule	sol87	1987	only	-	Feb	6	12:14:05s -0:14:05 -
    +Rule	sol87	1987	only	-	Feb	7	12:14:10s -0:14:10 -
    +Rule	sol87	1987	only	-	Feb	8	12:14:10s -0:14:10 -
    +Rule	sol87	1987	only	-	Feb	9	12:14:15s -0:14:15 -
    +Rule	sol87	1987	only	-	Feb	10	12:14:15s -0:14:15 -
    +Rule	sol87	1987	only	-	Feb	11	12:14:15s -0:14:15 -
    +Rule	sol87	1987	only	-	Feb	12	12:14:15s -0:14:15 -
    +Rule	sol87	1987	only	-	Feb	13	12:14:15s -0:14:15 -
    +Rule	sol87	1987	only	-	Feb	14	12:14:15s -0:14:15 -
    +Rule	sol87	1987	only	-	Feb	15	12:14:10s -0:14:10 -
    +Rule	sol87	1987	only	-	Feb	16	12:14:10s -0:14:10 -
    +Rule	sol87	1987	only	-	Feb	17	12:14:05s -0:14:05 -
    +Rule	sol87	1987	only	-	Feb	18	12:14:00s -0:14:00 -
    +Rule	sol87	1987	only	-	Feb	19	12:13:55s -0:13:55 -
    +Rule	sol87	1987	only	-	Feb	20	12:13:50s -0:13:50 -
    +Rule	sol87	1987	only	-	Feb	21	12:13:45s -0:13:45 -
    +Rule	sol87	1987	only	-	Feb	22	12:13:35s -0:13:35 -
    +Rule	sol87	1987	only	-	Feb	23	12:13:30s -0:13:30 -
    +Rule	sol87	1987	only	-	Feb	24	12:13:20s -0:13:20 -
    +Rule	sol87	1987	only	-	Feb	25	12:13:10s -0:13:10 -
    +Rule	sol87	1987	only	-	Feb	26	12:13:00s -0:13:00 -
    +Rule	sol87	1987	only	-	Feb	27	12:12:50s -0:12:50 -
    +Rule	sol87	1987	only	-	Feb	28	12:12:40s -0:12:40 -
    +Rule	sol87	1987	only	-	Mar	1	12:12:30s -0:12:30 -
    +Rule	sol87	1987	only	-	Mar	2	12:12:20s -0:12:20 -
    +Rule	sol87	1987	only	-	Mar	3	12:12:05s -0:12:05 -
    +Rule	sol87	1987	only	-	Mar	4	12:11:55s -0:11:55 -
    +Rule	sol87	1987	only	-	Mar	5	12:11:40s -0:11:40 -
    +Rule	sol87	1987	only	-	Mar	6	12:11:25s -0:11:25 -
    +Rule	sol87	1987	only	-	Mar	7	12:11:15s -0:11:15 -
    +Rule	sol87	1987	only	-	Mar	8	12:11:00s -0:11:00 -
    +Rule	sol87	1987	only	-	Mar	9	12:10:45s -0:10:45 -
    +Rule	sol87	1987	only	-	Mar	10	12:10:30s -0:10:30 -
    +Rule	sol87	1987	only	-	Mar	11	12:10:15s -0:10:15 -
    +Rule	sol87	1987	only	-	Mar	12	12:09:55s -0:09:55 -
    +Rule	sol87	1987	only	-	Mar	13	12:09:40s -0:09:40 -
    +Rule	sol87	1987	only	-	Mar	14	12:09:25s -0:09:25 -
    +Rule	sol87	1987	only	-	Mar	15	12:09:10s -0:09:10 -
    +Rule	sol87	1987	only	-	Mar	16	12:08:50s -0:08:50 -
    +Rule	sol87	1987	only	-	Mar	17	12:08:35s -0:08:35 -
    +Rule	sol87	1987	only	-	Mar	18	12:08:15s -0:08:15 -
    +Rule	sol87	1987	only	-	Mar	19	12:08:00s -0:08:00 -
    +Rule	sol87	1987	only	-	Mar	20	12:07:40s -0:07:40 -
    +Rule	sol87	1987	only	-	Mar	21	12:07:25s -0:07:25 -
    +Rule	sol87	1987	only	-	Mar	22	12:07:05s -0:07:05 -
    +Rule	sol87	1987	only	-	Mar	23	12:06:50s -0:06:50 -
    +Rule	sol87	1987	only	-	Mar	24	12:06:30s -0:06:30 -
    +Rule	sol87	1987	only	-	Mar	25	12:06:10s -0:06:10 -
    +Rule	sol87	1987	only	-	Mar	26	12:05:55s -0:05:55 -
    +Rule	sol87	1987	only	-	Mar	27	12:05:35s -0:05:35 -
    +Rule	sol87	1987	only	-	Mar	28	12:05:15s -0:05:15 -
    +Rule	sol87	1987	only	-	Mar	29	12:05:00s -0:05:00 -
    +Rule	sol87	1987	only	-	Mar	30	12:04:40s -0:04:40 -
    +Rule	sol87	1987	only	-	Mar	31	12:04:25s -0:04:25 -
    +Rule	sol87	1987	only	-	Apr	1	12:04:05s -0:04:05 -
    +Rule	sol87	1987	only	-	Apr	2	12:03:45s -0:03:45 -
    +Rule	sol87	1987	only	-	Apr	3	12:03:30s -0:03:30 -
    +Rule	sol87	1987	only	-	Apr	4	12:03:10s -0:03:10 -
    +Rule	sol87	1987	only	-	Apr	5	12:02:55s -0:02:55 -
    +Rule	sol87	1987	only	-	Apr	6	12:02:35s -0:02:35 -
    +Rule	sol87	1987	only	-	Apr	7	12:02:20s -0:02:20 -
    +Rule	sol87	1987	only	-	Apr	8	12:02:05s -0:02:05 -
    +Rule	sol87	1987	only	-	Apr	9	12:01:45s -0:01:45 -
    +Rule	sol87	1987	only	-	Apr	10	12:01:30s -0:01:30 -
    +Rule	sol87	1987	only	-	Apr	11	12:01:15s -0:01:15 -
    +Rule	sol87	1987	only	-	Apr	12	12:00:55s -0:00:55 -
    +Rule	sol87	1987	only	-	Apr	13	12:00:40s -0:00:40 -
    +Rule	sol87	1987	only	-	Apr	14	12:00:25s -0:00:25 -
    +Rule	sol87	1987	only	-	Apr	15	12:00:10s -0:00:10 -
    +Rule	sol87	1987	only	-	Apr	16	11:59:55s 0:00:05 -
    +Rule	sol87	1987	only	-	Apr	17	11:59:45s 0:00:15 -
    +Rule	sol87	1987	only	-	Apr	18	11:59:30s 0:00:30 -
    +Rule	sol87	1987	only	-	Apr	19	11:59:15s 0:00:45 -
    +Rule	sol87	1987	only	-	Apr	20	11:59:05s 0:00:55 -
    +Rule	sol87	1987	only	-	Apr	21	11:58:50s 0:01:10 -
    +Rule	sol87	1987	only	-	Apr	22	11:58:40s 0:01:20 -
    +Rule	sol87	1987	only	-	Apr	23	11:58:25s 0:01:35 -
    +Rule	sol87	1987	only	-	Apr	24	11:58:15s 0:01:45 -
    +Rule	sol87	1987	only	-	Apr	25	11:58:05s 0:01:55 -
    +Rule	sol87	1987	only	-	Apr	26	11:57:55s 0:02:05 -
    +Rule	sol87	1987	only	-	Apr	27	11:57:45s 0:02:15 -
    +Rule	sol87	1987	only	-	Apr	28	11:57:35s 0:02:25 -
    +Rule	sol87	1987	only	-	Apr	29	11:57:25s 0:02:35 -
    +Rule	sol87	1987	only	-	Apr	30	11:57:15s 0:02:45 -
    +Rule	sol87	1987	only	-	May	1	11:57:10s 0:02:50 -
    +Rule	sol87	1987	only	-	May	2	11:57:00s 0:03:00 -
    +Rule	sol87	1987	only	-	May	3	11:56:55s 0:03:05 -
    +Rule	sol87	1987	only	-	May	4	11:56:50s 0:03:10 -
    +Rule	sol87	1987	only	-	May	5	11:56:45s 0:03:15 -
    +Rule	sol87	1987	only	-	May	6	11:56:40s 0:03:20 -
    +Rule	sol87	1987	only	-	May	7	11:56:35s 0:03:25 -
    +Rule	sol87	1987	only	-	May	8	11:56:30s 0:03:30 -
    +Rule	sol87	1987	only	-	May	9	11:56:25s 0:03:35 -
    +Rule	sol87	1987	only	-	May	10	11:56:25s 0:03:35 -
    +Rule	sol87	1987	only	-	May	11	11:56:20s 0:03:40 -
    +Rule	sol87	1987	only	-	May	12	11:56:20s 0:03:40 -
    +Rule	sol87	1987	only	-	May	13	11:56:20s 0:03:40 -
    +Rule	sol87	1987	only	-	May	14	11:56:20s 0:03:40 -
    +Rule	sol87	1987	only	-	May	15	11:56:20s 0:03:40 -
    +Rule	sol87	1987	only	-	May	16	11:56:20s 0:03:40 -
    +Rule	sol87	1987	only	-	May	17	11:56:20s 0:03:40 -
    +Rule	sol87	1987	only	-	May	18	11:56:20s 0:03:40 -
    +Rule	sol87	1987	only	-	May	19	11:56:25s 0:03:35 -
    +Rule	sol87	1987	only	-	May	20	11:56:25s 0:03:35 -
    +Rule	sol87	1987	only	-	May	21	11:56:30s 0:03:30 -
    +Rule	sol87	1987	only	-	May	22	11:56:35s 0:03:25 -
    +Rule	sol87	1987	only	-	May	23	11:56:40s 0:03:20 -
    +Rule	sol87	1987	only	-	May	24	11:56:45s 0:03:15 -
    +Rule	sol87	1987	only	-	May	25	11:56:50s 0:03:10 -
    +Rule	sol87	1987	only	-	May	26	11:56:55s 0:03:05 -
    +Rule	sol87	1987	only	-	May	27	11:57:00s 0:03:00 -
    +Rule	sol87	1987	only	-	May	28	11:57:10s 0:02:50 -
    +Rule	sol87	1987	only	-	May	29	11:57:15s 0:02:45 -
    +Rule	sol87	1987	only	-	May	30	11:57:25s 0:02:35 -
    +Rule	sol87	1987	only	-	May	31	11:57:30s 0:02:30 -
    +Rule	sol87	1987	only	-	Jun	1	11:57:40s 0:02:20 -
    +Rule	sol87	1987	only	-	Jun	2	11:57:50s 0:02:10 -
    +Rule	sol87	1987	only	-	Jun	3	11:58:00s 0:02:00 -
    +Rule	sol87	1987	only	-	Jun	4	11:58:10s 0:01:50 -
    +Rule	sol87	1987	only	-	Jun	5	11:58:20s 0:01:40 -
    +Rule	sol87	1987	only	-	Jun	6	11:58:30s 0:01:30 -
    +Rule	sol87	1987	only	-	Jun	7	11:58:40s 0:01:20 -
    +Rule	sol87	1987	only	-	Jun	8	11:58:50s 0:01:10 -
    +Rule	sol87	1987	only	-	Jun	9	11:59:05s 0:00:55 -
    +Rule	sol87	1987	only	-	Jun	10	11:59:15s 0:00:45 -
    +Rule	sol87	1987	only	-	Jun	11	11:59:30s 0:00:30 -
    +Rule	sol87	1987	only	-	Jun	12	11:59:40s 0:00:20 -
    +Rule	sol87	1987	only	-	Jun	13	11:59:50s 0:00:10 -
    +Rule	sol87	1987	only	-	Jun	14	12:00:05s -0:00:05 -
    +Rule	sol87	1987	only	-	Jun	15	12:00:15s -0:00:15 -
    +Rule	sol87	1987	only	-	Jun	16	12:00:30s -0:00:30 -
    +Rule	sol87	1987	only	-	Jun	17	12:00:45s -0:00:45 -
    +Rule	sol87	1987	only	-	Jun	18	12:00:55s -0:00:55 -
    +Rule	sol87	1987	only	-	Jun	19	12:01:10s -0:01:10 -
    +Rule	sol87	1987	only	-	Jun	20	12:01:20s -0:01:20 -
    +Rule	sol87	1987	only	-	Jun	21	12:01:35s -0:01:35 -
    +Rule	sol87	1987	only	-	Jun	22	12:01:50s -0:01:50 -
    +Rule	sol87	1987	only	-	Jun	23	12:02:00s -0:02:00 -
    +Rule	sol87	1987	only	-	Jun	24	12:02:15s -0:02:15 -
    +Rule	sol87	1987	only	-	Jun	25	12:02:25s -0:02:25 -
    +Rule	sol87	1987	only	-	Jun	26	12:02:40s -0:02:40 -
    +Rule	sol87	1987	only	-	Jun	27	12:02:50s -0:02:50 -
    +Rule	sol87	1987	only	-	Jun	28	12:03:05s -0:03:05 -
    +Rule	sol87	1987	only	-	Jun	29	12:03:15s -0:03:15 -
    +Rule	sol87	1987	only	-	Jun	30	12:03:30s -0:03:30 -
    +Rule	sol87	1987	only	-	Jul	1	12:03:40s -0:03:40 -
    +Rule	sol87	1987	only	-	Jul	2	12:03:50s -0:03:50 -
    +Rule	sol87	1987	only	-	Jul	3	12:04:05s -0:04:05 -
    +Rule	sol87	1987	only	-	Jul	4	12:04:15s -0:04:15 -
    +Rule	sol87	1987	only	-	Jul	5	12:04:25s -0:04:25 -
    +Rule	sol87	1987	only	-	Jul	6	12:04:35s -0:04:35 -
    +Rule	sol87	1987	only	-	Jul	7	12:04:45s -0:04:45 -
    +Rule	sol87	1987	only	-	Jul	8	12:04:55s -0:04:55 -
    +Rule	sol87	1987	only	-	Jul	9	12:05:05s -0:05:05 -
    +Rule	sol87	1987	only	-	Jul	10	12:05:15s -0:05:15 -
    +Rule	sol87	1987	only	-	Jul	11	12:05:20s -0:05:20 -
    +Rule	sol87	1987	only	-	Jul	12	12:05:30s -0:05:30 -
    +Rule	sol87	1987	only	-	Jul	13	12:05:40s -0:05:40 -
    +Rule	sol87	1987	only	-	Jul	14	12:05:45s -0:05:45 -
    +Rule	sol87	1987	only	-	Jul	15	12:05:50s -0:05:50 -
    +Rule	sol87	1987	only	-	Jul	16	12:06:00s -0:06:00 -
    +Rule	sol87	1987	only	-	Jul	17	12:06:05s -0:06:05 -
    +Rule	sol87	1987	only	-	Jul	18	12:06:10s -0:06:10 -
    +Rule	sol87	1987	only	-	Jul	19	12:06:15s -0:06:15 -
    +Rule	sol87	1987	only	-	Jul	20	12:06:15s -0:06:15 -
    +Rule	sol87	1987	only	-	Jul	21	12:06:20s -0:06:20 -
    +Rule	sol87	1987	only	-	Jul	22	12:06:25s -0:06:25 -
    +Rule	sol87	1987	only	-	Jul	23	12:06:25s -0:06:25 -
    +Rule	sol87	1987	only	-	Jul	24	12:06:25s -0:06:25 -
    +Rule	sol87	1987	only	-	Jul	25	12:06:30s -0:06:30 -
    +Rule	sol87	1987	only	-	Jul	26	12:06:30s -0:06:30 -
    +Rule	sol87	1987	only	-	Jul	27	12:06:30s -0:06:30 -
    +Rule	sol87	1987	only	-	Jul	28	12:06:30s -0:06:30 -
    +Rule	sol87	1987	only	-	Jul	29	12:06:25s -0:06:25 -
    +Rule	sol87	1987	only	-	Jul	30	12:06:25s -0:06:25 -
    +Rule	sol87	1987	only	-	Jul	31	12:06:25s -0:06:25 -
    +Rule	sol87	1987	only	-	Aug	1	12:06:20s -0:06:20 -
    +Rule	sol87	1987	only	-	Aug	2	12:06:15s -0:06:15 -
    +Rule	sol87	1987	only	-	Aug	3	12:06:10s -0:06:10 -
    +Rule	sol87	1987	only	-	Aug	4	12:06:05s -0:06:05 -
    +Rule	sol87	1987	only	-	Aug	5	12:06:00s -0:06:00 -
    +Rule	sol87	1987	only	-	Aug	6	12:05:55s -0:05:55 -
    +Rule	sol87	1987	only	-	Aug	7	12:05:50s -0:05:50 -
    +Rule	sol87	1987	only	-	Aug	8	12:05:40s -0:05:40 -
    +Rule	sol87	1987	only	-	Aug	9	12:05:35s -0:05:35 -
    +Rule	sol87	1987	only	-	Aug	10	12:05:25s -0:05:25 -
    +Rule	sol87	1987	only	-	Aug	11	12:05:15s -0:05:15 -
    +Rule	sol87	1987	only	-	Aug	12	12:05:05s -0:05:05 -
    +Rule	sol87	1987	only	-	Aug	13	12:04:55s -0:04:55 -
    +Rule	sol87	1987	only	-	Aug	14	12:04:45s -0:04:45 -
    +Rule	sol87	1987	only	-	Aug	15	12:04:35s -0:04:35 -
    +Rule	sol87	1987	only	-	Aug	16	12:04:25s -0:04:25 -
    +Rule	sol87	1987	only	-	Aug	17	12:04:10s -0:04:10 -
    +Rule	sol87	1987	only	-	Aug	18	12:04:00s -0:04:00 -
    +Rule	sol87	1987	only	-	Aug	19	12:03:45s -0:03:45 -
    +Rule	sol87	1987	only	-	Aug	20	12:03:30s -0:03:30 -
    +Rule	sol87	1987	only	-	Aug	21	12:03:15s -0:03:15 -
    +Rule	sol87	1987	only	-	Aug	22	12:03:00s -0:03:00 -
    +Rule	sol87	1987	only	-	Aug	23	12:02:45s -0:02:45 -
    +Rule	sol87	1987	only	-	Aug	24	12:02:30s -0:02:30 -
    +Rule	sol87	1987	only	-	Aug	25	12:02:15s -0:02:15 -
    +Rule	sol87	1987	only	-	Aug	26	12:02:00s -0:02:00 -
    +Rule	sol87	1987	only	-	Aug	27	12:01:40s -0:01:40 -
    +Rule	sol87	1987	only	-	Aug	28	12:01:25s -0:01:25 -
    +Rule	sol87	1987	only	-	Aug	29	12:01:05s -0:01:05 -
    +Rule	sol87	1987	only	-	Aug	30	12:00:50s -0:00:50 -
    +Rule	sol87	1987	only	-	Aug	31	12:00:30s -0:00:30 -
    +Rule	sol87	1987	only	-	Sep	1	12:00:10s -0:00:10 -
    +Rule	sol87	1987	only	-	Sep	2	11:59:50s 0:00:10 -
    +Rule	sol87	1987	only	-	Sep	3	11:59:35s 0:00:25 -
    +Rule	sol87	1987	only	-	Sep	4	11:59:15s 0:00:45 -
    +Rule	sol87	1987	only	-	Sep	5	11:58:55s 0:01:05 -
    +Rule	sol87	1987	only	-	Sep	6	11:58:35s 0:01:25 -
    +Rule	sol87	1987	only	-	Sep	7	11:58:15s 0:01:45 -
    +Rule	sol87	1987	only	-	Sep	8	11:57:55s 0:02:05 -
    +Rule	sol87	1987	only	-	Sep	9	11:57:30s 0:02:30 -
    +Rule	sol87	1987	only	-	Sep	10	11:57:10s 0:02:50 -
    +Rule	sol87	1987	only	-	Sep	11	11:56:50s 0:03:10 -
    +Rule	sol87	1987	only	-	Sep	12	11:56:30s 0:03:30 -
    +Rule	sol87	1987	only	-	Sep	13	11:56:10s 0:03:50 -
    +Rule	sol87	1987	only	-	Sep	14	11:55:45s 0:04:15 -
    +Rule	sol87	1987	only	-	Sep	15	11:55:25s 0:04:35 -
    +Rule	sol87	1987	only	-	Sep	16	11:55:05s 0:04:55 -
    +Rule	sol87	1987	only	-	Sep	17	11:54:45s 0:05:15 -
    +Rule	sol87	1987	only	-	Sep	18	11:54:20s 0:05:40 -
    +Rule	sol87	1987	only	-	Sep	19	11:54:00s 0:06:00 -
    +Rule	sol87	1987	only	-	Sep	20	11:53:40s 0:06:20 -
    +Rule	sol87	1987	only	-	Sep	21	11:53:15s 0:06:45 -
    +Rule	sol87	1987	only	-	Sep	22	11:52:55s 0:07:05 -
    +Rule	sol87	1987	only	-	Sep	23	11:52:35s 0:07:25 -
    +Rule	sol87	1987	only	-	Sep	24	11:52:15s 0:07:45 -
    +Rule	sol87	1987	only	-	Sep	25	11:51:55s 0:08:05 -
    +Rule	sol87	1987	only	-	Sep	26	11:51:35s 0:08:25 -
    +Rule	sol87	1987	only	-	Sep	27	11:51:10s 0:08:50 -
    +Rule	sol87	1987	only	-	Sep	28	11:50:50s 0:09:10 -
    +Rule	sol87	1987	only	-	Sep	29	11:50:30s 0:09:30 -
    +Rule	sol87	1987	only	-	Sep	30	11:50:10s 0:09:50 -
    +Rule	sol87	1987	only	-	Oct	1	11:49:50s 0:10:10 -
    +Rule	sol87	1987	only	-	Oct	2	11:49:35s 0:10:25 -
    +Rule	sol87	1987	only	-	Oct	3	11:49:15s 0:10:45 -
    +Rule	sol87	1987	only	-	Oct	4	11:48:55s 0:11:05 -
    +Rule	sol87	1987	only	-	Oct	5	11:48:35s 0:11:25 -
    +Rule	sol87	1987	only	-	Oct	6	11:48:20s 0:11:40 -
    +Rule	sol87	1987	only	-	Oct	7	11:48:00s 0:12:00 -
    +Rule	sol87	1987	only	-	Oct	8	11:47:45s 0:12:15 -
    +Rule	sol87	1987	only	-	Oct	9	11:47:25s 0:12:35 -
    +Rule	sol87	1987	only	-	Oct	10	11:47:10s 0:12:50 -
    +Rule	sol87	1987	only	-	Oct	11	11:46:55s 0:13:05 -
    +Rule	sol87	1987	only	-	Oct	12	11:46:40s 0:13:20 -
    +Rule	sol87	1987	only	-	Oct	13	11:46:25s 0:13:35 -
    +Rule	sol87	1987	only	-	Oct	14	11:46:10s 0:13:50 -
    +Rule	sol87	1987	only	-	Oct	15	11:45:55s 0:14:05 -
    +Rule	sol87	1987	only	-	Oct	16	11:45:45s 0:14:15 -
    +Rule	sol87	1987	only	-	Oct	17	11:45:30s 0:14:30 -
    +Rule	sol87	1987	only	-	Oct	18	11:45:20s 0:14:40 -
    +Rule	sol87	1987	only	-	Oct	19	11:45:05s 0:14:55 -
    +Rule	sol87	1987	only	-	Oct	20	11:44:55s 0:15:05 -
    +Rule	sol87	1987	only	-	Oct	21	11:44:45s 0:15:15 -
    +Rule	sol87	1987	only	-	Oct	22	11:44:35s 0:15:25 -
    +Rule	sol87	1987	only	-	Oct	23	11:44:25s 0:15:35 -
    +Rule	sol87	1987	only	-	Oct	24	11:44:20s 0:15:40 -
    +Rule	sol87	1987	only	-	Oct	25	11:44:10s 0:15:50 -
    +Rule	sol87	1987	only	-	Oct	26	11:44:05s 0:15:55 -
    +Rule	sol87	1987	only	-	Oct	27	11:43:55s 0:16:05 -
    +Rule	sol87	1987	only	-	Oct	28	11:43:50s 0:16:10 -
    +Rule	sol87	1987	only	-	Oct	29	11:43:45s 0:16:15 -
    +Rule	sol87	1987	only	-	Oct	30	11:43:45s 0:16:15 -
    +Rule	sol87	1987	only	-	Oct	31	11:43:40s 0:16:20 -
    +Rule	sol87	1987	only	-	Nov	1	11:43:40s 0:16:20 -
    +Rule	sol87	1987	only	-	Nov	2	11:43:35s 0:16:25 -
    +Rule	sol87	1987	only	-	Nov	3	11:43:35s 0:16:25 -
    +Rule	sol87	1987	only	-	Nov	4	11:43:35s 0:16:25 -
    +Rule	sol87	1987	only	-	Nov	5	11:43:35s 0:16:25 -
    +Rule	sol87	1987	only	-	Nov	6	11:43:40s 0:16:20 -
    +Rule	sol87	1987	only	-	Nov	7	11:43:40s 0:16:20 -
    +Rule	sol87	1987	only	-	Nov	8	11:43:45s 0:16:15 -
    +Rule	sol87	1987	only	-	Nov	9	11:43:50s 0:16:10 -
    +Rule	sol87	1987	only	-	Nov	10	11:43:55s 0:16:05 -
    +Rule	sol87	1987	only	-	Nov	11	11:44:00s 0:16:00 -
    +Rule	sol87	1987	only	-	Nov	12	11:44:05s 0:15:55 -
    +Rule	sol87	1987	only	-	Nov	13	11:44:15s 0:15:45 -
    +Rule	sol87	1987	only	-	Nov	14	11:44:20s 0:15:40 -
    +Rule	sol87	1987	only	-	Nov	15	11:44:30s 0:15:30 -
    +Rule	sol87	1987	only	-	Nov	16	11:44:40s 0:15:20 -
    +Rule	sol87	1987	only	-	Nov	17	11:44:50s 0:15:10 -
    +Rule	sol87	1987	only	-	Nov	18	11:45:05s 0:14:55 -
    +Rule	sol87	1987	only	-	Nov	19	11:45:15s 0:14:45 -
    +Rule	sol87	1987	only	-	Nov	20	11:45:30s 0:14:30 -
    +Rule	sol87	1987	only	-	Nov	21	11:45:45s 0:14:15 -
    +Rule	sol87	1987	only	-	Nov	22	11:46:00s 0:14:00 -
    +Rule	sol87	1987	only	-	Nov	23	11:46:15s 0:13:45 -
    +Rule	sol87	1987	only	-	Nov	24	11:46:30s 0:13:30 -
    +Rule	sol87	1987	only	-	Nov	25	11:46:50s 0:13:10 -
    +Rule	sol87	1987	only	-	Nov	26	11:47:10s 0:12:50 -
    +Rule	sol87	1987	only	-	Nov	27	11:47:25s 0:12:35 -
    +Rule	sol87	1987	only	-	Nov	28	11:47:45s 0:12:15 -
    +Rule	sol87	1987	only	-	Nov	29	11:48:05s 0:11:55 -
    +Rule	sol87	1987	only	-	Nov	30	11:48:30s 0:11:30 -
    +Rule	sol87	1987	only	-	Dec	1	11:48:50s 0:11:10 -
    +Rule	sol87	1987	only	-	Dec	2	11:49:10s 0:10:50 -
    +Rule	sol87	1987	only	-	Dec	3	11:49:35s 0:10:25 -
    +Rule	sol87	1987	only	-	Dec	4	11:50:00s 0:10:00 -
    +Rule	sol87	1987	only	-	Dec	5	11:50:25s 0:09:35 -
    +Rule	sol87	1987	only	-	Dec	6	11:50:50s 0:09:10 -
    +Rule	sol87	1987	only	-	Dec	7	11:51:15s 0:08:45 -
    +Rule	sol87	1987	only	-	Dec	8	11:51:40s 0:08:20 -
    +Rule	sol87	1987	only	-	Dec	9	11:52:05s 0:07:55 -
    +Rule	sol87	1987	only	-	Dec	10	11:52:30s 0:07:30 -
    +Rule	sol87	1987	only	-	Dec	11	11:53:00s 0:07:00 -
    +Rule	sol87	1987	only	-	Dec	12	11:53:25s 0:06:35 -
    +Rule	sol87	1987	only	-	Dec	13	11:53:55s 0:06:05 -
    +Rule	sol87	1987	only	-	Dec	14	11:54:25s 0:05:35 -
    +Rule	sol87	1987	only	-	Dec	15	11:54:50s 0:05:10 -
    +Rule	sol87	1987	only	-	Dec	16	11:55:20s 0:04:40 -
    +Rule	sol87	1987	only	-	Dec	17	11:55:50s 0:04:10 -
    +Rule	sol87	1987	only	-	Dec	18	11:56:20s 0:03:40 -
    +Rule	sol87	1987	only	-	Dec	19	11:56:50s 0:03:10 -
    +Rule	sol87	1987	only	-	Dec	20	11:57:20s 0:02:40 -
    +Rule	sol87	1987	only	-	Dec	21	11:57:50s 0:02:10 -
    +Rule	sol87	1987	only	-	Dec	22	11:58:20s 0:01:40 -
    +Rule	sol87	1987	only	-	Dec	23	11:58:50s 0:01:10 -
    +Rule	sol87	1987	only	-	Dec	24	11:59:20s 0:00:40 -
    +Rule	sol87	1987	only	-	Dec	25	11:59:50s 0:00:10 -
    +Rule	sol87	1987	only	-	Dec	26	12:00:20s -0:00:20 -
    +Rule	sol87	1987	only	-	Dec	27	12:00:45s -0:00:45 -
    +Rule	sol87	1987	only	-	Dec	28	12:01:15s -0:01:15 -
    +Rule	sol87	1987	only	-	Dec	29	12:01:45s -0:01:45 -
    +Rule	sol87	1987	only	-	Dec	30	12:02:15s -0:02:15 -
    +Rule	sol87	1987	only	-	Dec	31	12:02:45s -0:02:45 -
    +
    +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
    +# Before and after 1987, we'll operate on local mean solar time.
    +
    +# Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
    +Zone	Asia/Riyadh87	3:07:04	-		zzz	1987
    +			3:07:04	sol87		zzz	1988
    +			3:07:04	-		zzz
    +# For backward compatibility...
    +Link	Asia/Riyadh87	Mideast/Riyadh87
    diff --git a/examples/tz/solar88 b/examples/tz/solar88
    new file mode 100644
    index 0000000..8db590e
    --- /dev/null
    +++ b/examples/tz/solar88
    @@ -0,0 +1,391 @@
    +# 
    +# @(#)solar88	8.2
    +# This file is in the public domain, so clarified as of
    +# 2009-05-17 by Arthur David Olson.
    +
    +# Apparent noon times below are for Riyadh; they're a bit off for other places.
    +# Times were computed using formulas in the U.S. Naval Observatory's
    +# Almanac for Computers 1988; the formulas "will give EqT to an accuracy of
    +# [plus or minus two] seconds during the current year."
    +#
    +# Rounding to the nearest five seconds results in fewer than
    +# 256 different "time types"--a limit that's faced because time types are
    +# stored on disk as unsigned chars.
    +
    +# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    +Rule	sol88	1988	only	-	Jan	1	12:03:15s -0:03:15 -
    +Rule	sol88	1988	only	-	Jan	2	12:03:40s -0:03:40 -
    +Rule	sol88	1988	only	-	Jan	3	12:04:10s -0:04:10 -
    +Rule	sol88	1988	only	-	Jan	4	12:04:40s -0:04:40 -
    +Rule	sol88	1988	only	-	Jan	5	12:05:05s -0:05:05 -
    +Rule	sol88	1988	only	-	Jan	6	12:05:30s -0:05:30 -
    +Rule	sol88	1988	only	-	Jan	7	12:06:00s -0:06:00 -
    +Rule	sol88	1988	only	-	Jan	8	12:06:25s -0:06:25 -
    +Rule	sol88	1988	only	-	Jan	9	12:06:50s -0:06:50 -
    +Rule	sol88	1988	only	-	Jan	10	12:07:15s -0:07:15 -
    +Rule	sol88	1988	only	-	Jan	11	12:07:40s -0:07:40 -
    +Rule	sol88	1988	only	-	Jan	12	12:08:05s -0:08:05 -
    +Rule	sol88	1988	only	-	Jan	13	12:08:25s -0:08:25 -
    +Rule	sol88	1988	only	-	Jan	14	12:08:50s -0:08:50 -
    +Rule	sol88	1988	only	-	Jan	15	12:09:10s -0:09:10 -
    +Rule	sol88	1988	only	-	Jan	16	12:09:30s -0:09:30 -
    +Rule	sol88	1988	only	-	Jan	17	12:09:50s -0:09:50 -
    +Rule	sol88	1988	only	-	Jan	18	12:10:10s -0:10:10 -
    +Rule	sol88	1988	only	-	Jan	19	12:10:30s -0:10:30 -
    +Rule	sol88	1988	only	-	Jan	20	12:10:50s -0:10:50 -
    +Rule	sol88	1988	only	-	Jan	21	12:11:05s -0:11:05 -
    +Rule	sol88	1988	only	-	Jan	22	12:11:25s -0:11:25 -
    +Rule	sol88	1988	only	-	Jan	23	12:11:40s -0:11:40 -
    +Rule	sol88	1988	only	-	Jan	24	12:11:55s -0:11:55 -
    +Rule	sol88	1988	only	-	Jan	25	12:12:10s -0:12:10 -
    +Rule	sol88	1988	only	-	Jan	26	12:12:25s -0:12:25 -
    +Rule	sol88	1988	only	-	Jan	27	12:12:40s -0:12:40 -
    +Rule	sol88	1988	only	-	Jan	28	12:12:50s -0:12:50 -
    +Rule	sol88	1988	only	-	Jan	29	12:13:00s -0:13:00 -
    +Rule	sol88	1988	only	-	Jan	30	12:13:10s -0:13:10 -
    +Rule	sol88	1988	only	-	Jan	31	12:13:20s -0:13:20 -
    +Rule	sol88	1988	only	-	Feb	1	12:13:30s -0:13:30 -
    +Rule	sol88	1988	only	-	Feb	2	12:13:40s -0:13:40 -
    +Rule	sol88	1988	only	-	Feb	3	12:13:45s -0:13:45 -
    +Rule	sol88	1988	only	-	Feb	4	12:13:55s -0:13:55 -
    +Rule	sol88	1988	only	-	Feb	5	12:14:00s -0:14:00 -
    +Rule	sol88	1988	only	-	Feb	6	12:14:05s -0:14:05 -
    +Rule	sol88	1988	only	-	Feb	7	12:14:10s -0:14:10 -
    +Rule	sol88	1988	only	-	Feb	8	12:14:10s -0:14:10 -
    +Rule	sol88	1988	only	-	Feb	9	12:14:15s -0:14:15 -
    +Rule	sol88	1988	only	-	Feb	10	12:14:15s -0:14:15 -
    +Rule	sol88	1988	only	-	Feb	11	12:14:15s -0:14:15 -
    +Rule	sol88	1988	only	-	Feb	12	12:14:15s -0:14:15 -
    +Rule	sol88	1988	only	-	Feb	13	12:14:15s -0:14:15 -
    +Rule	sol88	1988	only	-	Feb	14	12:14:15s -0:14:15 -
    +Rule	sol88	1988	only	-	Feb	15	12:14:10s -0:14:10 -
    +Rule	sol88	1988	only	-	Feb	16	12:14:10s -0:14:10 -
    +Rule	sol88	1988	only	-	Feb	17	12:14:05s -0:14:05 -
    +Rule	sol88	1988	only	-	Feb	18	12:14:00s -0:14:00 -
    +Rule	sol88	1988	only	-	Feb	19	12:13:55s -0:13:55 -
    +Rule	sol88	1988	only	-	Feb	20	12:13:50s -0:13:50 -
    +Rule	sol88	1988	only	-	Feb	21	12:13:45s -0:13:45 -
    +Rule	sol88	1988	only	-	Feb	22	12:13:40s -0:13:40 -
    +Rule	sol88	1988	only	-	Feb	23	12:13:30s -0:13:30 -
    +Rule	sol88	1988	only	-	Feb	24	12:13:20s -0:13:20 -
    +Rule	sol88	1988	only	-	Feb	25	12:13:15s -0:13:15 -
    +Rule	sol88	1988	only	-	Feb	26	12:13:05s -0:13:05 -
    +Rule	sol88	1988	only	-	Feb	27	12:12:55s -0:12:55 -
    +Rule	sol88	1988	only	-	Feb	28	12:12:45s -0:12:45 -
    +Rule	sol88	1988	only	-	Feb	29	12:12:30s -0:12:30 -
    +Rule	sol88	1988	only	-	Mar	1	12:12:20s -0:12:20 -
    +Rule	sol88	1988	only	-	Mar	2	12:12:10s -0:12:10 -
    +Rule	sol88	1988	only	-	Mar	3	12:11:55s -0:11:55 -
    +Rule	sol88	1988	only	-	Mar	4	12:11:45s -0:11:45 -
    +Rule	sol88	1988	only	-	Mar	5	12:11:30s -0:11:30 -
    +Rule	sol88	1988	only	-	Mar	6	12:11:15s -0:11:15 -
    +Rule	sol88	1988	only	-	Mar	7	12:11:00s -0:11:00 -
    +Rule	sol88	1988	only	-	Mar	8	12:10:45s -0:10:45 -
    +Rule	sol88	1988	only	-	Mar	9	12:10:30s -0:10:30 -
    +Rule	sol88	1988	only	-	Mar	10	12:10:15s -0:10:15 -
    +Rule	sol88	1988	only	-	Mar	11	12:10:00s -0:10:00 -
    +Rule	sol88	1988	only	-	Mar	12	12:09:45s -0:09:45 -
    +Rule	sol88	1988	only	-	Mar	13	12:09:30s -0:09:30 -
    +Rule	sol88	1988	only	-	Mar	14	12:09:10s -0:09:10 -
    +Rule	sol88	1988	only	-	Mar	15	12:08:55s -0:08:55 -
    +Rule	sol88	1988	only	-	Mar	16	12:08:40s -0:08:40 -
    +Rule	sol88	1988	only	-	Mar	17	12:08:20s -0:08:20 -
    +Rule	sol88	1988	only	-	Mar	18	12:08:05s -0:08:05 -
    +Rule	sol88	1988	only	-	Mar	19	12:07:45s -0:07:45 -
    +Rule	sol88	1988	only	-	Mar	20	12:07:30s -0:07:30 -
    +Rule	sol88	1988	only	-	Mar	21	12:07:10s -0:07:10 -
    +Rule	sol88	1988	only	-	Mar	22	12:06:50s -0:06:50 -
    +Rule	sol88	1988	only	-	Mar	23	12:06:35s -0:06:35 -
    +Rule	sol88	1988	only	-	Mar	24	12:06:15s -0:06:15 -
    +Rule	sol88	1988	only	-	Mar	25	12:06:00s -0:06:00 -
    +Rule	sol88	1988	only	-	Mar	26	12:05:40s -0:05:40 -
    +Rule	sol88	1988	only	-	Mar	27	12:05:20s -0:05:20 -
    +Rule	sol88	1988	only	-	Mar	28	12:05:05s -0:05:05 -
    +Rule	sol88	1988	only	-	Mar	29	12:04:45s -0:04:45 -
    +Rule	sol88	1988	only	-	Mar	30	12:04:25s -0:04:25 -
    +Rule	sol88	1988	only	-	Mar	31	12:04:10s -0:04:10 -
    +Rule	sol88	1988	only	-	Apr	1	12:03:50s -0:03:50 -
    +Rule	sol88	1988	only	-	Apr	2	12:03:35s -0:03:35 -
    +Rule	sol88	1988	only	-	Apr	3	12:03:15s -0:03:15 -
    +Rule	sol88	1988	only	-	Apr	4	12:03:00s -0:03:00 -
    +Rule	sol88	1988	only	-	Apr	5	12:02:40s -0:02:40 -
    +Rule	sol88	1988	only	-	Apr	6	12:02:25s -0:02:25 -
    +Rule	sol88	1988	only	-	Apr	7	12:02:05s -0:02:05 -
    +Rule	sol88	1988	only	-	Apr	8	12:01:50s -0:01:50 -
    +Rule	sol88	1988	only	-	Apr	9	12:01:35s -0:01:35 -
    +Rule	sol88	1988	only	-	Apr	10	12:01:15s -0:01:15 -
    +Rule	sol88	1988	only	-	Apr	11	12:01:00s -0:01:00 -
    +Rule	sol88	1988	only	-	Apr	12	12:00:45s -0:00:45 -
    +Rule	sol88	1988	only	-	Apr	13	12:00:30s -0:00:30 -
    +Rule	sol88	1988	only	-	Apr	14	12:00:15s -0:00:15 -
    +Rule	sol88	1988	only	-	Apr	15	12:00:00s 0:00:00 -
    +Rule	sol88	1988	only	-	Apr	16	11:59:45s 0:00:15 -
    +Rule	sol88	1988	only	-	Apr	17	11:59:30s 0:00:30 -
    +Rule	sol88	1988	only	-	Apr	18	11:59:20s 0:00:40 -
    +Rule	sol88	1988	only	-	Apr	19	11:59:05s 0:00:55 -
    +Rule	sol88	1988	only	-	Apr	20	11:58:55s 0:01:05 -
    +Rule	sol88	1988	only	-	Apr	21	11:58:40s 0:01:20 -
    +Rule	sol88	1988	only	-	Apr	22	11:58:30s 0:01:30 -
    +Rule	sol88	1988	only	-	Apr	23	11:58:15s 0:01:45 -
    +Rule	sol88	1988	only	-	Apr	24	11:58:05s 0:01:55 -
    +Rule	sol88	1988	only	-	Apr	25	11:57:55s 0:02:05 -
    +Rule	sol88	1988	only	-	Apr	26	11:57:45s 0:02:15 -
    +Rule	sol88	1988	only	-	Apr	27	11:57:35s 0:02:25 -
    +Rule	sol88	1988	only	-	Apr	28	11:57:30s 0:02:30 -
    +Rule	sol88	1988	only	-	Apr	29	11:57:20s 0:02:40 -
    +Rule	sol88	1988	only	-	Apr	30	11:57:10s 0:02:50 -
    +Rule	sol88	1988	only	-	May	1	11:57:05s 0:02:55 -
    +Rule	sol88	1988	only	-	May	2	11:56:55s 0:03:05 -
    +Rule	sol88	1988	only	-	May	3	11:56:50s 0:03:10 -
    +Rule	sol88	1988	only	-	May	4	11:56:45s 0:03:15 -
    +Rule	sol88	1988	only	-	May	5	11:56:40s 0:03:20 -
    +Rule	sol88	1988	only	-	May	6	11:56:35s 0:03:25 -
    +Rule	sol88	1988	only	-	May	7	11:56:30s 0:03:30 -
    +Rule	sol88	1988	only	-	May	8	11:56:25s 0:03:35 -
    +Rule	sol88	1988	only	-	May	9	11:56:25s 0:03:35 -
    +Rule	sol88	1988	only	-	May	10	11:56:20s 0:03:40 -
    +Rule	sol88	1988	only	-	May	11	11:56:20s 0:03:40 -
    +Rule	sol88	1988	only	-	May	12	11:56:20s 0:03:40 -
    +Rule	sol88	1988	only	-	May	13	11:56:20s 0:03:40 -
    +Rule	sol88	1988	only	-	May	14	11:56:20s 0:03:40 -
    +Rule	sol88	1988	only	-	May	15	11:56:20s 0:03:40 -
    +Rule	sol88	1988	only	-	May	16	11:56:20s 0:03:40 -
    +Rule	sol88	1988	only	-	May	17	11:56:20s 0:03:40 -
    +Rule	sol88	1988	only	-	May	18	11:56:25s 0:03:35 -
    +Rule	sol88	1988	only	-	May	19	11:56:25s 0:03:35 -
    +Rule	sol88	1988	only	-	May	20	11:56:30s 0:03:30 -
    +Rule	sol88	1988	only	-	May	21	11:56:35s 0:03:25 -
    +Rule	sol88	1988	only	-	May	22	11:56:40s 0:03:20 -
    +Rule	sol88	1988	only	-	May	23	11:56:45s 0:03:15 -
    +Rule	sol88	1988	only	-	May	24	11:56:50s 0:03:10 -
    +Rule	sol88	1988	only	-	May	25	11:56:55s 0:03:05 -
    +Rule	sol88	1988	only	-	May	26	11:57:00s 0:03:00 -
    +Rule	sol88	1988	only	-	May	27	11:57:05s 0:02:55 -
    +Rule	sol88	1988	only	-	May	28	11:57:15s 0:02:45 -
    +Rule	sol88	1988	only	-	May	29	11:57:20s 0:02:40 -
    +Rule	sol88	1988	only	-	May	30	11:57:30s 0:02:30 -
    +Rule	sol88	1988	only	-	May	31	11:57:40s 0:02:20 -
    +Rule	sol88	1988	only	-	Jun	1	11:57:50s 0:02:10 -
    +Rule	sol88	1988	only	-	Jun	2	11:57:55s 0:02:05 -
    +Rule	sol88	1988	only	-	Jun	3	11:58:05s 0:01:55 -
    +Rule	sol88	1988	only	-	Jun	4	11:58:15s 0:01:45 -
    +Rule	sol88	1988	only	-	Jun	5	11:58:30s 0:01:30 -
    +Rule	sol88	1988	only	-	Jun	6	11:58:40s 0:01:20 -
    +Rule	sol88	1988	only	-	Jun	7	11:58:50s 0:01:10 -
    +Rule	sol88	1988	only	-	Jun	8	11:59:00s 0:01:00 -
    +Rule	sol88	1988	only	-	Jun	9	11:59:15s 0:00:45 -
    +Rule	sol88	1988	only	-	Jun	10	11:59:25s 0:00:35 -
    +Rule	sol88	1988	only	-	Jun	11	11:59:35s 0:00:25 -
    +Rule	sol88	1988	only	-	Jun	12	11:59:50s 0:00:10 -
    +Rule	sol88	1988	only	-	Jun	13	12:00:00s 0:00:00 -
    +Rule	sol88	1988	only	-	Jun	14	12:00:15s -0:00:15 -
    +Rule	sol88	1988	only	-	Jun	15	12:00:25s -0:00:25 -
    +Rule	sol88	1988	only	-	Jun	16	12:00:40s -0:00:40 -
    +Rule	sol88	1988	only	-	Jun	17	12:00:55s -0:00:55 -
    +Rule	sol88	1988	only	-	Jun	18	12:01:05s -0:01:05 -
    +Rule	sol88	1988	only	-	Jun	19	12:01:20s -0:01:20 -
    +Rule	sol88	1988	only	-	Jun	20	12:01:30s -0:01:30 -
    +Rule	sol88	1988	only	-	Jun	21	12:01:45s -0:01:45 -
    +Rule	sol88	1988	only	-	Jun	22	12:02:00s -0:02:00 -
    +Rule	sol88	1988	only	-	Jun	23	12:02:10s -0:02:10 -
    +Rule	sol88	1988	only	-	Jun	24	12:02:25s -0:02:25 -
    +Rule	sol88	1988	only	-	Jun	25	12:02:35s -0:02:35 -
    +Rule	sol88	1988	only	-	Jun	26	12:02:50s -0:02:50 -
    +Rule	sol88	1988	only	-	Jun	27	12:03:00s -0:03:00 -
    +Rule	sol88	1988	only	-	Jun	28	12:03:15s -0:03:15 -
    +Rule	sol88	1988	only	-	Jun	29	12:03:25s -0:03:25 -
    +Rule	sol88	1988	only	-	Jun	30	12:03:40s -0:03:40 -
    +Rule	sol88	1988	only	-	Jul	1	12:03:50s -0:03:50 -
    +Rule	sol88	1988	only	-	Jul	2	12:04:00s -0:04:00 -
    +Rule	sol88	1988	only	-	Jul	3	12:04:10s -0:04:10 -
    +Rule	sol88	1988	only	-	Jul	4	12:04:25s -0:04:25 -
    +Rule	sol88	1988	only	-	Jul	5	12:04:35s -0:04:35 -
    +Rule	sol88	1988	only	-	Jul	6	12:04:45s -0:04:45 -
    +Rule	sol88	1988	only	-	Jul	7	12:04:55s -0:04:55 -
    +Rule	sol88	1988	only	-	Jul	8	12:05:05s -0:05:05 -
    +Rule	sol88	1988	only	-	Jul	9	12:05:10s -0:05:10 -
    +Rule	sol88	1988	only	-	Jul	10	12:05:20s -0:05:20 -
    +Rule	sol88	1988	only	-	Jul	11	12:05:30s -0:05:30 -
    +Rule	sol88	1988	only	-	Jul	12	12:05:35s -0:05:35 -
    +Rule	sol88	1988	only	-	Jul	13	12:05:45s -0:05:45 -
    +Rule	sol88	1988	only	-	Jul	14	12:05:50s -0:05:50 -
    +Rule	sol88	1988	only	-	Jul	15	12:05:55s -0:05:55 -
    +Rule	sol88	1988	only	-	Jul	16	12:06:00s -0:06:00 -
    +Rule	sol88	1988	only	-	Jul	17	12:06:05s -0:06:05 -
    +Rule	sol88	1988	only	-	Jul	18	12:06:10s -0:06:10 -
    +Rule	sol88	1988	only	-	Jul	19	12:06:15s -0:06:15 -
    +Rule	sol88	1988	only	-	Jul	20	12:06:20s -0:06:20 -
    +Rule	sol88	1988	only	-	Jul	21	12:06:25s -0:06:25 -
    +Rule	sol88	1988	only	-	Jul	22	12:06:25s -0:06:25 -
    +Rule	sol88	1988	only	-	Jul	23	12:06:25s -0:06:25 -
    +Rule	sol88	1988	only	-	Jul	24	12:06:30s -0:06:30 -
    +Rule	sol88	1988	only	-	Jul	25	12:06:30s -0:06:30 -
    +Rule	sol88	1988	only	-	Jul	26	12:06:30s -0:06:30 -
    +Rule	sol88	1988	only	-	Jul	27	12:06:30s -0:06:30 -
    +Rule	sol88	1988	only	-	Jul	28	12:06:30s -0:06:30 -
    +Rule	sol88	1988	only	-	Jul	29	12:06:25s -0:06:25 -
    +Rule	sol88	1988	only	-	Jul	30	12:06:25s -0:06:25 -
    +Rule	sol88	1988	only	-	Jul	31	12:06:20s -0:06:20 -
    +Rule	sol88	1988	only	-	Aug	1	12:06:15s -0:06:15 -
    +Rule	sol88	1988	only	-	Aug	2	12:06:15s -0:06:15 -
    +Rule	sol88	1988	only	-	Aug	3	12:06:10s -0:06:10 -
    +Rule	sol88	1988	only	-	Aug	4	12:06:05s -0:06:05 -
    +Rule	sol88	1988	only	-	Aug	5	12:05:55s -0:05:55 -
    +Rule	sol88	1988	only	-	Aug	6	12:05:50s -0:05:50 -
    +Rule	sol88	1988	only	-	Aug	7	12:05:45s -0:05:45 -
    +Rule	sol88	1988	only	-	Aug	8	12:05:35s -0:05:35 -
    +Rule	sol88	1988	only	-	Aug	9	12:05:25s -0:05:25 -
    +Rule	sol88	1988	only	-	Aug	10	12:05:20s -0:05:20 -
    +Rule	sol88	1988	only	-	Aug	11	12:05:10s -0:05:10 -
    +Rule	sol88	1988	only	-	Aug	12	12:05:00s -0:05:00 -
    +Rule	sol88	1988	only	-	Aug	13	12:04:50s -0:04:50 -
    +Rule	sol88	1988	only	-	Aug	14	12:04:35s -0:04:35 -
    +Rule	sol88	1988	only	-	Aug	15	12:04:25s -0:04:25 -
    +Rule	sol88	1988	only	-	Aug	16	12:04:15s -0:04:15 -
    +Rule	sol88	1988	only	-	Aug	17	12:04:00s -0:04:00 -
    +Rule	sol88	1988	only	-	Aug	18	12:03:50s -0:03:50 -
    +Rule	sol88	1988	only	-	Aug	19	12:03:35s -0:03:35 -
    +Rule	sol88	1988	only	-	Aug	20	12:03:20s -0:03:20 -
    +Rule	sol88	1988	only	-	Aug	21	12:03:05s -0:03:05 -
    +Rule	sol88	1988	only	-	Aug	22	12:02:50s -0:02:50 -
    +Rule	sol88	1988	only	-	Aug	23	12:02:35s -0:02:35 -
    +Rule	sol88	1988	only	-	Aug	24	12:02:20s -0:02:20 -
    +Rule	sol88	1988	only	-	Aug	25	12:02:00s -0:02:00 -
    +Rule	sol88	1988	only	-	Aug	26	12:01:45s -0:01:45 -
    +Rule	sol88	1988	only	-	Aug	27	12:01:30s -0:01:30 -
    +Rule	sol88	1988	only	-	Aug	28	12:01:10s -0:01:10 -
    +Rule	sol88	1988	only	-	Aug	29	12:00:50s -0:00:50 -
    +Rule	sol88	1988	only	-	Aug	30	12:00:35s -0:00:35 -
    +Rule	sol88	1988	only	-	Aug	31	12:00:15s -0:00:15 -
    +Rule	sol88	1988	only	-	Sep	1	11:59:55s 0:00:05 -
    +Rule	sol88	1988	only	-	Sep	2	11:59:35s 0:00:25 -
    +Rule	sol88	1988	only	-	Sep	3	11:59:20s 0:00:40 -
    +Rule	sol88	1988	only	-	Sep	4	11:59:00s 0:01:00 -
    +Rule	sol88	1988	only	-	Sep	5	11:58:40s 0:01:20 -
    +Rule	sol88	1988	only	-	Sep	6	11:58:20s 0:01:40 -
    +Rule	sol88	1988	only	-	Sep	7	11:58:00s 0:02:00 -
    +Rule	sol88	1988	only	-	Sep	8	11:57:35s 0:02:25 -
    +Rule	sol88	1988	only	-	Sep	9	11:57:15s 0:02:45 -
    +Rule	sol88	1988	only	-	Sep	10	11:56:55s 0:03:05 -
    +Rule	sol88	1988	only	-	Sep	11	11:56:35s 0:03:25 -
    +Rule	sol88	1988	only	-	Sep	12	11:56:15s 0:03:45 -
    +Rule	sol88	1988	only	-	Sep	13	11:55:50s 0:04:10 -
    +Rule	sol88	1988	only	-	Sep	14	11:55:30s 0:04:30 -
    +Rule	sol88	1988	only	-	Sep	15	11:55:10s 0:04:50 -
    +Rule	sol88	1988	only	-	Sep	16	11:54:50s 0:05:10 -
    +Rule	sol88	1988	only	-	Sep	17	11:54:25s 0:05:35 -
    +Rule	sol88	1988	only	-	Sep	18	11:54:05s 0:05:55 -
    +Rule	sol88	1988	only	-	Sep	19	11:53:45s 0:06:15 -
    +Rule	sol88	1988	only	-	Sep	20	11:53:25s 0:06:35 -
    +Rule	sol88	1988	only	-	Sep	21	11:53:00s 0:07:00 -
    +Rule	sol88	1988	only	-	Sep	22	11:52:40s 0:07:20 -
    +Rule	sol88	1988	only	-	Sep	23	11:52:20s 0:07:40 -
    +Rule	sol88	1988	only	-	Sep	24	11:52:00s 0:08:00 -
    +Rule	sol88	1988	only	-	Sep	25	11:51:40s 0:08:20 -
    +Rule	sol88	1988	only	-	Sep	26	11:51:15s 0:08:45 -
    +Rule	sol88	1988	only	-	Sep	27	11:50:55s 0:09:05 -
    +Rule	sol88	1988	only	-	Sep	28	11:50:35s 0:09:25 -
    +Rule	sol88	1988	only	-	Sep	29	11:50:15s 0:09:45 -
    +Rule	sol88	1988	only	-	Sep	30	11:49:55s 0:10:05 -
    +Rule	sol88	1988	only	-	Oct	1	11:49:35s 0:10:25 -
    +Rule	sol88	1988	only	-	Oct	2	11:49:20s 0:10:40 -
    +Rule	sol88	1988	only	-	Oct	3	11:49:00s 0:11:00 -
    +Rule	sol88	1988	only	-	Oct	4	11:48:40s 0:11:20 -
    +Rule	sol88	1988	only	-	Oct	5	11:48:25s 0:11:35 -
    +Rule	sol88	1988	only	-	Oct	6	11:48:05s 0:11:55 -
    +Rule	sol88	1988	only	-	Oct	7	11:47:50s 0:12:10 -
    +Rule	sol88	1988	only	-	Oct	8	11:47:30s 0:12:30 -
    +Rule	sol88	1988	only	-	Oct	9	11:47:15s 0:12:45 -
    +Rule	sol88	1988	only	-	Oct	10	11:47:00s 0:13:00 -
    +Rule	sol88	1988	only	-	Oct	11	11:46:45s 0:13:15 -
    +Rule	sol88	1988	only	-	Oct	12	11:46:30s 0:13:30 -
    +Rule	sol88	1988	only	-	Oct	13	11:46:15s 0:13:45 -
    +Rule	sol88	1988	only	-	Oct	14	11:46:00s 0:14:00 -
    +Rule	sol88	1988	only	-	Oct	15	11:45:45s 0:14:15 -
    +Rule	sol88	1988	only	-	Oct	16	11:45:35s 0:14:25 -
    +Rule	sol88	1988	only	-	Oct	17	11:45:20s 0:14:40 -
    +Rule	sol88	1988	only	-	Oct	18	11:45:10s 0:14:50 -
    +Rule	sol88	1988	only	-	Oct	19	11:45:00s 0:15:00 -
    +Rule	sol88	1988	only	-	Oct	20	11:44:45s 0:15:15 -
    +Rule	sol88	1988	only	-	Oct	21	11:44:40s 0:15:20 -
    +Rule	sol88	1988	only	-	Oct	22	11:44:30s 0:15:30 -
    +Rule	sol88	1988	only	-	Oct	23	11:44:20s 0:15:40 -
    +Rule	sol88	1988	only	-	Oct	24	11:44:10s 0:15:50 -
    +Rule	sol88	1988	only	-	Oct	25	11:44:05s 0:15:55 -
    +Rule	sol88	1988	only	-	Oct	26	11:44:00s 0:16:00 -
    +Rule	sol88	1988	only	-	Oct	27	11:43:55s 0:16:05 -
    +Rule	sol88	1988	only	-	Oct	28	11:43:50s 0:16:10 -
    +Rule	sol88	1988	only	-	Oct	29	11:43:45s 0:16:15 -
    +Rule	sol88	1988	only	-	Oct	30	11:43:40s 0:16:20 -
    +Rule	sol88	1988	only	-	Oct	31	11:43:40s 0:16:20 -
    +Rule	sol88	1988	only	-	Nov	1	11:43:35s 0:16:25 -
    +Rule	sol88	1988	only	-	Nov	2	11:43:35s 0:16:25 -
    +Rule	sol88	1988	only	-	Nov	3	11:43:35s 0:16:25 -
    +Rule	sol88	1988	only	-	Nov	4	11:43:35s 0:16:25 -
    +Rule	sol88	1988	only	-	Nov	5	11:43:40s 0:16:20 -
    +Rule	sol88	1988	only	-	Nov	6	11:43:40s 0:16:20 -
    +Rule	sol88	1988	only	-	Nov	7	11:43:45s 0:16:15 -
    +Rule	sol88	1988	only	-	Nov	8	11:43:45s 0:16:15 -
    +Rule	sol88	1988	only	-	Nov	9	11:43:50s 0:16:10 -
    +Rule	sol88	1988	only	-	Nov	10	11:44:00s 0:16:00 -
    +Rule	sol88	1988	only	-	Nov	11	11:44:05s 0:15:55 -
    +Rule	sol88	1988	only	-	Nov	12	11:44:10s 0:15:50 -
    +Rule	sol88	1988	only	-	Nov	13	11:44:20s 0:15:40 -
    +Rule	sol88	1988	only	-	Nov	14	11:44:30s 0:15:30 -
    +Rule	sol88	1988	only	-	Nov	15	11:44:40s 0:15:20 -
    +Rule	sol88	1988	only	-	Nov	16	11:44:50s 0:15:10 -
    +Rule	sol88	1988	only	-	Nov	17	11:45:00s 0:15:00 -
    +Rule	sol88	1988	only	-	Nov	18	11:45:15s 0:14:45 -
    +Rule	sol88	1988	only	-	Nov	19	11:45:25s 0:14:35 -
    +Rule	sol88	1988	only	-	Nov	20	11:45:40s 0:14:20 -
    +Rule	sol88	1988	only	-	Nov	21	11:45:55s 0:14:05 -
    +Rule	sol88	1988	only	-	Nov	22	11:46:10s 0:13:50 -
    +Rule	sol88	1988	only	-	Nov	23	11:46:30s 0:13:30 -
    +Rule	sol88	1988	only	-	Nov	24	11:46:45s 0:13:15 -
    +Rule	sol88	1988	only	-	Nov	25	11:47:05s 0:12:55 -
    +Rule	sol88	1988	only	-	Nov	26	11:47:20s 0:12:40 -
    +Rule	sol88	1988	only	-	Nov	27	11:47:40s 0:12:20 -
    +Rule	sol88	1988	only	-	Nov	28	11:48:00s 0:12:00 -
    +Rule	sol88	1988	only	-	Nov	29	11:48:25s 0:11:35 -
    +Rule	sol88	1988	only	-	Nov	30	11:48:45s 0:11:15 -
    +Rule	sol88	1988	only	-	Dec	1	11:49:05s 0:10:55 -
    +Rule	sol88	1988	only	-	Dec	2	11:49:30s 0:10:30 -
    +Rule	sol88	1988	only	-	Dec	3	11:49:55s 0:10:05 -
    +Rule	sol88	1988	only	-	Dec	4	11:50:15s 0:09:45 -
    +Rule	sol88	1988	only	-	Dec	5	11:50:40s 0:09:20 -
    +Rule	sol88	1988	only	-	Dec	6	11:51:05s 0:08:55 -
    +Rule	sol88	1988	only	-	Dec	7	11:51:35s 0:08:25 -
    +Rule	sol88	1988	only	-	Dec	8	11:52:00s 0:08:00 -
    +Rule	sol88	1988	only	-	Dec	9	11:52:25s 0:07:35 -
    +Rule	sol88	1988	only	-	Dec	10	11:52:55s 0:07:05 -
    +Rule	sol88	1988	only	-	Dec	11	11:53:20s 0:06:40 -
    +Rule	sol88	1988	only	-	Dec	12	11:53:50s 0:06:10 -
    +Rule	sol88	1988	only	-	Dec	13	11:54:15s 0:05:45 -
    +Rule	sol88	1988	only	-	Dec	14	11:54:45s 0:05:15 -
    +Rule	sol88	1988	only	-	Dec	15	11:55:15s 0:04:45 -
    +Rule	sol88	1988	only	-	Dec	16	11:55:45s 0:04:15 -
    +Rule	sol88	1988	only	-	Dec	17	11:56:15s 0:03:45 -
    +Rule	sol88	1988	only	-	Dec	18	11:56:40s 0:03:20 -
    +Rule	sol88	1988	only	-	Dec	19	11:57:10s 0:02:50 -
    +Rule	sol88	1988	only	-	Dec	20	11:57:40s 0:02:20 -
    +Rule	sol88	1988	only	-	Dec	21	11:58:10s 0:01:50 -
    +Rule	sol88	1988	only	-	Dec	22	11:58:40s 0:01:20 -
    +Rule	sol88	1988	only	-	Dec	23	11:59:10s 0:00:50 -
    +Rule	sol88	1988	only	-	Dec	24	11:59:40s 0:00:20 -
    +Rule	sol88	1988	only	-	Dec	25	12:00:10s -0:00:10 -
    +Rule	sol88	1988	only	-	Dec	26	12:00:40s -0:00:40 -
    +Rule	sol88	1988	only	-	Dec	27	12:01:10s -0:01:10 -
    +Rule	sol88	1988	only	-	Dec	28	12:01:40s -0:01:40 -
    +Rule	sol88	1988	only	-	Dec	29	12:02:10s -0:02:10 -
    +Rule	sol88	1988	only	-	Dec	30	12:02:35s -0:02:35 -
    +Rule	sol88	1988	only	-	Dec	31	12:03:05s -0:03:05 -
    +
    +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
    +# Before and after 1988, we'll operate on local mean solar time.
    +
    +# Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
    +Zone	Asia/Riyadh88	3:07:04	-		zzz	1988
    +			3:07:04	sol88		zzz	1989
    +			3:07:04	-		zzz
    +# For backward compatibility...
    +Link	Asia/Riyadh88	Mideast/Riyadh88
    diff --git a/examples/tz/solar89 b/examples/tz/solar89
    new file mode 100644
    index 0000000..d24de4a
    --- /dev/null
    +++ b/examples/tz/solar89
    @@ -0,0 +1,396 @@
    +# 
    +# @(#)solar89	8.2
    +# This file is in the public domain, so clarified as of
    +# 2009-05-17 by Arthur David Olson.
    +
    +# Apparent noon times below are for Riyadh; they're a bit off for other places.
    +# Times were computed using a formula provided by the U. S. Naval Observatory:
    +#	eqt = -105.8 * sin(l) + 596.2 * sin(2 * l) + 4.4 * sin(3 * l)
    +#		-12.7 * sin(4 * l) - 429.0 * cos(l) - 2.1 * cos (2 * l)
    +#		+ 19.3 * cos(3 * l);
    +# where l is the "mean longitude of the Sun" given by
    +#	l = 279.642 degrees + 0.985647 * d
    +# and d is the interval in days from January 0, 0 hours Universal Time
    +# (equaling the day of the year plus the fraction of a day from zero hours).
    +# The accuracy of the formula is plus or minus three seconds.
    +#
    +# Rounding to the nearest five seconds results in fewer than
    +# 256 different "time types"--a limit that's faced because time types are
    +# stored on disk as unsigned chars.
    +
    +# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    +Rule	sol89	1989	only	-	Jan	1	12:03:35s -0:03:35 -
    +Rule	sol89	1989	only	-	Jan	2	12:04:05s -0:04:05 -
    +Rule	sol89	1989	only	-	Jan	3	12:04:30s -0:04:30 -
    +Rule	sol89	1989	only	-	Jan	4	12:05:00s -0:05:00 -
    +Rule	sol89	1989	only	-	Jan	5	12:05:25s -0:05:25 -
    +Rule	sol89	1989	only	-	Jan	6	12:05:50s -0:05:50 -
    +Rule	sol89	1989	only	-	Jan	7	12:06:15s -0:06:15 -
    +Rule	sol89	1989	only	-	Jan	8	12:06:45s -0:06:45 -
    +Rule	sol89	1989	only	-	Jan	9	12:07:10s -0:07:10 -
    +Rule	sol89	1989	only	-	Jan	10	12:07:35s -0:07:35 -
    +Rule	sol89	1989	only	-	Jan	11	12:07:55s -0:07:55 -
    +Rule	sol89	1989	only	-	Jan	12	12:08:20s -0:08:20 -
    +Rule	sol89	1989	only	-	Jan	13	12:08:45s -0:08:45 -
    +Rule	sol89	1989	only	-	Jan	14	12:09:05s -0:09:05 -
    +Rule	sol89	1989	only	-	Jan	15	12:09:25s -0:09:25 -
    +Rule	sol89	1989	only	-	Jan	16	12:09:45s -0:09:45 -
    +Rule	sol89	1989	only	-	Jan	17	12:10:05s -0:10:05 -
    +Rule	sol89	1989	only	-	Jan	18	12:10:25s -0:10:25 -
    +Rule	sol89	1989	only	-	Jan	19	12:10:45s -0:10:45 -
    +Rule	sol89	1989	only	-	Jan	20	12:11:05s -0:11:05 -
    +Rule	sol89	1989	only	-	Jan	21	12:11:20s -0:11:20 -
    +Rule	sol89	1989	only	-	Jan	22	12:11:35s -0:11:35 -
    +Rule	sol89	1989	only	-	Jan	23	12:11:55s -0:11:55 -
    +Rule	sol89	1989	only	-	Jan	24	12:12:10s -0:12:10 -
    +Rule	sol89	1989	only	-	Jan	25	12:12:20s -0:12:20 -
    +Rule	sol89	1989	only	-	Jan	26	12:12:35s -0:12:35 -
    +Rule	sol89	1989	only	-	Jan	27	12:12:50s -0:12:50 -
    +Rule	sol89	1989	only	-	Jan	28	12:13:00s -0:13:00 -
    +Rule	sol89	1989	only	-	Jan	29	12:13:10s -0:13:10 -
    +Rule	sol89	1989	only	-	Jan	30	12:13:20s -0:13:20 -
    +Rule	sol89	1989	only	-	Jan	31	12:13:30s -0:13:30 -
    +Rule	sol89	1989	only	-	Feb	1	12:13:40s -0:13:40 -
    +Rule	sol89	1989	only	-	Feb	2	12:13:45s -0:13:45 -
    +Rule	sol89	1989	only	-	Feb	3	12:13:55s -0:13:55 -
    +Rule	sol89	1989	only	-	Feb	4	12:14:00s -0:14:00 -
    +Rule	sol89	1989	only	-	Feb	5	12:14:05s -0:14:05 -
    +Rule	sol89	1989	only	-	Feb	6	12:14:10s -0:14:10 -
    +Rule	sol89	1989	only	-	Feb	7	12:14:10s -0:14:10 -
    +Rule	sol89	1989	only	-	Feb	8	12:14:15s -0:14:15 -
    +Rule	sol89	1989	only	-	Feb	9	12:14:15s -0:14:15 -
    +Rule	sol89	1989	only	-	Feb	10	12:14:20s -0:14:20 -
    +Rule	sol89	1989	only	-	Feb	11	12:14:20s -0:14:20 -
    +Rule	sol89	1989	only	-	Feb	12	12:14:20s -0:14:20 -
    +Rule	sol89	1989	only	-	Feb	13	12:14:15s -0:14:15 -
    +Rule	sol89	1989	only	-	Feb	14	12:14:15s -0:14:15 -
    +Rule	sol89	1989	only	-	Feb	15	12:14:10s -0:14:10 -
    +Rule	sol89	1989	only	-	Feb	16	12:14:10s -0:14:10 -
    +Rule	sol89	1989	only	-	Feb	17	12:14:05s -0:14:05 -
    +Rule	sol89	1989	only	-	Feb	18	12:14:00s -0:14:00 -
    +Rule	sol89	1989	only	-	Feb	19	12:13:55s -0:13:55 -
    +Rule	sol89	1989	only	-	Feb	20	12:13:50s -0:13:50 -
    +Rule	sol89	1989	only	-	Feb	21	12:13:40s -0:13:40 -
    +Rule	sol89	1989	only	-	Feb	22	12:13:35s -0:13:35 -
    +Rule	sol89	1989	only	-	Feb	23	12:13:25s -0:13:25 -
    +Rule	sol89	1989	only	-	Feb	24	12:13:15s -0:13:15 -
    +Rule	sol89	1989	only	-	Feb	25	12:13:05s -0:13:05 -
    +Rule	sol89	1989	only	-	Feb	26	12:12:55s -0:12:55 -
    +Rule	sol89	1989	only	-	Feb	27	12:12:45s -0:12:45 -
    +Rule	sol89	1989	only	-	Feb	28	12:12:35s -0:12:35 -
    +Rule	sol89	1989	only	-	Mar	1	12:12:25s -0:12:25 -
    +Rule	sol89	1989	only	-	Mar	2	12:12:10s -0:12:10 -
    +Rule	sol89	1989	only	-	Mar	3	12:12:00s -0:12:00 -
    +Rule	sol89	1989	only	-	Mar	4	12:11:45s -0:11:45 -
    +Rule	sol89	1989	only	-	Mar	5	12:11:35s -0:11:35 -
    +Rule	sol89	1989	only	-	Mar	6	12:11:20s -0:11:20 -
    +Rule	sol89	1989	only	-	Mar	7	12:11:05s -0:11:05 -
    +Rule	sol89	1989	only	-	Mar	8	12:10:50s -0:10:50 -
    +Rule	sol89	1989	only	-	Mar	9	12:10:35s -0:10:35 -
    +Rule	sol89	1989	only	-	Mar	10	12:10:20s -0:10:20 -
    +Rule	sol89	1989	only	-	Mar	11	12:10:05s -0:10:05 -
    +Rule	sol89	1989	only	-	Mar	12	12:09:50s -0:09:50 -
    +Rule	sol89	1989	only	-	Mar	13	12:09:30s -0:09:30 -
    +Rule	sol89	1989	only	-	Mar	14	12:09:15s -0:09:15 -
    +Rule	sol89	1989	only	-	Mar	15	12:09:00s -0:09:00 -
    +Rule	sol89	1989	only	-	Mar	16	12:08:40s -0:08:40 -
    +Rule	sol89	1989	only	-	Mar	17	12:08:25s -0:08:25 -
    +Rule	sol89	1989	only	-	Mar	18	12:08:05s -0:08:05 -
    +Rule	sol89	1989	only	-	Mar	19	12:07:50s -0:07:50 -
    +Rule	sol89	1989	only	-	Mar	20	12:07:30s -0:07:30 -
    +Rule	sol89	1989	only	-	Mar	21	12:07:15s -0:07:15 -
    +Rule	sol89	1989	only	-	Mar	22	12:06:55s -0:06:55 -
    +Rule	sol89	1989	only	-	Mar	23	12:06:35s -0:06:35 -
    +Rule	sol89	1989	only	-	Mar	24	12:06:20s -0:06:20 -
    +Rule	sol89	1989	only	-	Mar	25	12:06:00s -0:06:00 -
    +Rule	sol89	1989	only	-	Mar	26	12:05:40s -0:05:40 -
    +Rule	sol89	1989	only	-	Mar	27	12:05:25s -0:05:25 -
    +Rule	sol89	1989	only	-	Mar	28	12:05:05s -0:05:05 -
    +Rule	sol89	1989	only	-	Mar	29	12:04:50s -0:04:50 -
    +Rule	sol89	1989	only	-	Mar	30	12:04:30s -0:04:30 -
    +Rule	sol89	1989	only	-	Mar	31	12:04:10s -0:04:10 -
    +Rule	sol89	1989	only	-	Apr	1	12:03:55s -0:03:55 -
    +Rule	sol89	1989	only	-	Apr	2	12:03:35s -0:03:35 -
    +Rule	sol89	1989	only	-	Apr	3	12:03:20s -0:03:20 -
    +Rule	sol89	1989	only	-	Apr	4	12:03:00s -0:03:00 -
    +Rule	sol89	1989	only	-	Apr	5	12:02:45s -0:02:45 -
    +Rule	sol89	1989	only	-	Apr	6	12:02:25s -0:02:25 -
    +Rule	sol89	1989	only	-	Apr	7	12:02:10s -0:02:10 -
    +Rule	sol89	1989	only	-	Apr	8	12:01:50s -0:01:50 -
    +Rule	sol89	1989	only	-	Apr	9	12:01:35s -0:01:35 -
    +Rule	sol89	1989	only	-	Apr	10	12:01:20s -0:01:20 -
    +Rule	sol89	1989	only	-	Apr	11	12:01:05s -0:01:05 -
    +Rule	sol89	1989	only	-	Apr	12	12:00:50s -0:00:50 -
    +Rule	sol89	1989	only	-	Apr	13	12:00:35s -0:00:35 -
    +Rule	sol89	1989	only	-	Apr	14	12:00:20s -0:00:20 -
    +Rule	sol89	1989	only	-	Apr	15	12:00:05s -0:00:05 -
    +Rule	sol89	1989	only	-	Apr	16	11:59:50s 0:00:10 -
    +Rule	sol89	1989	only	-	Apr	17	11:59:35s 0:00:25 -
    +Rule	sol89	1989	only	-	Apr	18	11:59:20s 0:00:40 -
    +Rule	sol89	1989	only	-	Apr	19	11:59:10s 0:00:50 -
    +Rule	sol89	1989	only	-	Apr	20	11:58:55s 0:01:05 -
    +Rule	sol89	1989	only	-	Apr	21	11:58:45s 0:01:15 -
    +Rule	sol89	1989	only	-	Apr	22	11:58:30s 0:01:30 -
    +Rule	sol89	1989	only	-	Apr	23	11:58:20s 0:01:40 -
    +Rule	sol89	1989	only	-	Apr	24	11:58:10s 0:01:50 -
    +Rule	sol89	1989	only	-	Apr	25	11:58:00s 0:02:00 -
    +Rule	sol89	1989	only	-	Apr	26	11:57:50s 0:02:10 -
    +Rule	sol89	1989	only	-	Apr	27	11:57:40s 0:02:20 -
    +Rule	sol89	1989	only	-	Apr	28	11:57:30s 0:02:30 -
    +Rule	sol89	1989	only	-	Apr	29	11:57:20s 0:02:40 -
    +Rule	sol89	1989	only	-	Apr	30	11:57:15s 0:02:45 -
    +Rule	sol89	1989	only	-	May	1	11:57:05s 0:02:55 -
    +Rule	sol89	1989	only	-	May	2	11:57:00s 0:03:00 -
    +Rule	sol89	1989	only	-	May	3	11:56:50s 0:03:10 -
    +Rule	sol89	1989	only	-	May	4	11:56:45s 0:03:15 -
    +Rule	sol89	1989	only	-	May	5	11:56:40s 0:03:20 -
    +Rule	sol89	1989	only	-	May	6	11:56:35s 0:03:25 -
    +Rule	sol89	1989	only	-	May	7	11:56:30s 0:03:30 -
    +Rule	sol89	1989	only	-	May	8	11:56:30s 0:03:30 -
    +Rule	sol89	1989	only	-	May	9	11:56:25s 0:03:35 -
    +Rule	sol89	1989	only	-	May	10	11:56:25s 0:03:35 -
    +Rule	sol89	1989	only	-	May	11	11:56:20s 0:03:40 -
    +Rule	sol89	1989	only	-	May	12	11:56:20s 0:03:40 -
    +Rule	sol89	1989	only	-	May	13	11:56:20s 0:03:40 -
    +Rule	sol89	1989	only	-	May	14	11:56:20s 0:03:40 -
    +Rule	sol89	1989	only	-	May	15	11:56:20s 0:03:40 -
    +Rule	sol89	1989	only	-	May	16	11:56:20s 0:03:40 -
    +Rule	sol89	1989	only	-	May	17	11:56:20s 0:03:40 -
    +Rule	sol89	1989	only	-	May	18	11:56:25s 0:03:35 -
    +Rule	sol89	1989	only	-	May	19	11:56:25s 0:03:35 -
    +Rule	sol89	1989	only	-	May	20	11:56:30s 0:03:30 -
    +Rule	sol89	1989	only	-	May	21	11:56:35s 0:03:25 -
    +Rule	sol89	1989	only	-	May	22	11:56:35s 0:03:25 -
    +Rule	sol89	1989	only	-	May	23	11:56:40s 0:03:20 -
    +Rule	sol89	1989	only	-	May	24	11:56:45s 0:03:15 -
    +Rule	sol89	1989	only	-	May	25	11:56:55s 0:03:05 -
    +Rule	sol89	1989	only	-	May	26	11:57:00s 0:03:00 -
    +Rule	sol89	1989	only	-	May	27	11:57:05s 0:02:55 -
    +Rule	sol89	1989	only	-	May	28	11:57:15s 0:02:45 -
    +Rule	sol89	1989	only	-	May	29	11:57:20s 0:02:40 -
    +Rule	sol89	1989	only	-	May	30	11:57:30s 0:02:30 -
    +Rule	sol89	1989	only	-	May	31	11:57:35s 0:02:25 -
    +Rule	sol89	1989	only	-	Jun	1	11:57:45s 0:02:15 -
    +Rule	sol89	1989	only	-	Jun	2	11:57:55s 0:02:05 -
    +Rule	sol89	1989	only	-	Jun	3	11:58:05s 0:01:55 -
    +Rule	sol89	1989	only	-	Jun	4	11:58:15s 0:01:45 -
    +Rule	sol89	1989	only	-	Jun	5	11:58:25s 0:01:35 -
    +Rule	sol89	1989	only	-	Jun	6	11:58:35s 0:01:25 -
    +Rule	sol89	1989	only	-	Jun	7	11:58:45s 0:01:15 -
    +Rule	sol89	1989	only	-	Jun	8	11:59:00s 0:01:00 -
    +Rule	sol89	1989	only	-	Jun	9	11:59:10s 0:00:50 -
    +Rule	sol89	1989	only	-	Jun	10	11:59:20s 0:00:40 -
    +Rule	sol89	1989	only	-	Jun	11	11:59:35s 0:00:25 -
    +Rule	sol89	1989	only	-	Jun	12	11:59:45s 0:00:15 -
    +Rule	sol89	1989	only	-	Jun	13	12:00:00s 0:00:00 -
    +Rule	sol89	1989	only	-	Jun	14	12:00:10s -0:00:10 -
    +Rule	sol89	1989	only	-	Jun	15	12:00:25s -0:00:25 -
    +Rule	sol89	1989	only	-	Jun	16	12:00:35s -0:00:35 -
    +Rule	sol89	1989	only	-	Jun	17	12:00:50s -0:00:50 -
    +Rule	sol89	1989	only	-	Jun	18	12:01:05s -0:01:05 -
    +Rule	sol89	1989	only	-	Jun	19	12:01:15s -0:01:15 -
    +Rule	sol89	1989	only	-	Jun	20	12:01:30s -0:01:30 -
    +Rule	sol89	1989	only	-	Jun	21	12:01:40s -0:01:40 -
    +Rule	sol89	1989	only	-	Jun	22	12:01:55s -0:01:55 -
    +Rule	sol89	1989	only	-	Jun	23	12:02:10s -0:02:10 -
    +Rule	sol89	1989	only	-	Jun	24	12:02:20s -0:02:20 -
    +Rule	sol89	1989	only	-	Jun	25	12:02:35s -0:02:35 -
    +Rule	sol89	1989	only	-	Jun	26	12:02:45s -0:02:45 -
    +Rule	sol89	1989	only	-	Jun	27	12:03:00s -0:03:00 -
    +Rule	sol89	1989	only	-	Jun	28	12:03:10s -0:03:10 -
    +Rule	sol89	1989	only	-	Jun	29	12:03:25s -0:03:25 -
    +Rule	sol89	1989	only	-	Jun	30	12:03:35s -0:03:35 -
    +Rule	sol89	1989	only	-	Jul	1	12:03:45s -0:03:45 -
    +Rule	sol89	1989	only	-	Jul	2	12:04:00s -0:04:00 -
    +Rule	sol89	1989	only	-	Jul	3	12:04:10s -0:04:10 -
    +Rule	sol89	1989	only	-	Jul	4	12:04:20s -0:04:20 -
    +Rule	sol89	1989	only	-	Jul	5	12:04:30s -0:04:30 -
    +Rule	sol89	1989	only	-	Jul	6	12:04:40s -0:04:40 -
    +Rule	sol89	1989	only	-	Jul	7	12:04:50s -0:04:50 -
    +Rule	sol89	1989	only	-	Jul	8	12:05:00s -0:05:00 -
    +Rule	sol89	1989	only	-	Jul	9	12:05:10s -0:05:10 -
    +Rule	sol89	1989	only	-	Jul	10	12:05:20s -0:05:20 -
    +Rule	sol89	1989	only	-	Jul	11	12:05:25s -0:05:25 -
    +Rule	sol89	1989	only	-	Jul	12	12:05:35s -0:05:35 -
    +Rule	sol89	1989	only	-	Jul	13	12:05:40s -0:05:40 -
    +Rule	sol89	1989	only	-	Jul	14	12:05:50s -0:05:50 -
    +Rule	sol89	1989	only	-	Jul	15	12:05:55s -0:05:55 -
    +Rule	sol89	1989	only	-	Jul	16	12:06:00s -0:06:00 -
    +Rule	sol89	1989	only	-	Jul	17	12:06:05s -0:06:05 -
    +Rule	sol89	1989	only	-	Jul	18	12:06:10s -0:06:10 -
    +Rule	sol89	1989	only	-	Jul	19	12:06:15s -0:06:15 -
    +Rule	sol89	1989	only	-	Jul	20	12:06:20s -0:06:20 -
    +Rule	sol89	1989	only	-	Jul	21	12:06:20s -0:06:20 -
    +Rule	sol89	1989	only	-	Jul	22	12:06:25s -0:06:25 -
    +Rule	sol89	1989	only	-	Jul	23	12:06:25s -0:06:25 -
    +Rule	sol89	1989	only	-	Jul	24	12:06:30s -0:06:30 -
    +Rule	sol89	1989	only	-	Jul	25	12:06:30s -0:06:30 -
    +Rule	sol89	1989	only	-	Jul	26	12:06:30s -0:06:30 -
    +Rule	sol89	1989	only	-	Jul	27	12:06:30s -0:06:30 -
    +Rule	sol89	1989	only	-	Jul	28	12:06:30s -0:06:30 -
    +Rule	sol89	1989	only	-	Jul	29	12:06:25s -0:06:25 -
    +Rule	sol89	1989	only	-	Jul	30	12:06:25s -0:06:25 -
    +Rule	sol89	1989	only	-	Jul	31	12:06:20s -0:06:20 -
    +Rule	sol89	1989	only	-	Aug	1	12:06:20s -0:06:20 -
    +Rule	sol89	1989	only	-	Aug	2	12:06:15s -0:06:15 -
    +Rule	sol89	1989	only	-	Aug	3	12:06:10s -0:06:10 -
    +Rule	sol89	1989	only	-	Aug	4	12:06:05s -0:06:05 -
    +Rule	sol89	1989	only	-	Aug	5	12:06:00s -0:06:00 -
    +Rule	sol89	1989	only	-	Aug	6	12:05:50s -0:05:50 -
    +Rule	sol89	1989	only	-	Aug	7	12:05:45s -0:05:45 -
    +Rule	sol89	1989	only	-	Aug	8	12:05:35s -0:05:35 -
    +Rule	sol89	1989	only	-	Aug	9	12:05:30s -0:05:30 -
    +Rule	sol89	1989	only	-	Aug	10	12:05:20s -0:05:20 -
    +Rule	sol89	1989	only	-	Aug	11	12:05:10s -0:05:10 -
    +Rule	sol89	1989	only	-	Aug	12	12:05:00s -0:05:00 -
    +Rule	sol89	1989	only	-	Aug	13	12:04:50s -0:04:50 -
    +Rule	sol89	1989	only	-	Aug	14	12:04:40s -0:04:40 -
    +Rule	sol89	1989	only	-	Aug	15	12:04:30s -0:04:30 -
    +Rule	sol89	1989	only	-	Aug	16	12:04:15s -0:04:15 -
    +Rule	sol89	1989	only	-	Aug	17	12:04:05s -0:04:05 -
    +Rule	sol89	1989	only	-	Aug	18	12:03:50s -0:03:50 -
    +Rule	sol89	1989	only	-	Aug	19	12:03:35s -0:03:35 -
    +Rule	sol89	1989	only	-	Aug	20	12:03:25s -0:03:25 -
    +Rule	sol89	1989	only	-	Aug	21	12:03:10s -0:03:10 -
    +Rule	sol89	1989	only	-	Aug	22	12:02:55s -0:02:55 -
    +Rule	sol89	1989	only	-	Aug	23	12:02:40s -0:02:40 -
    +Rule	sol89	1989	only	-	Aug	24	12:02:20s -0:02:20 -
    +Rule	sol89	1989	only	-	Aug	25	12:02:05s -0:02:05 -
    +Rule	sol89	1989	only	-	Aug	26	12:01:50s -0:01:50 -
    +Rule	sol89	1989	only	-	Aug	27	12:01:30s -0:01:30 -
    +Rule	sol89	1989	only	-	Aug	28	12:01:15s -0:01:15 -
    +Rule	sol89	1989	only	-	Aug	29	12:00:55s -0:00:55 -
    +Rule	sol89	1989	only	-	Aug	30	12:00:40s -0:00:40 -
    +Rule	sol89	1989	only	-	Aug	31	12:00:20s -0:00:20 -
    +Rule	sol89	1989	only	-	Sep	1	12:00:00s 0:00:00 -
    +Rule	sol89	1989	only	-	Sep	2	11:59:45s 0:00:15 -
    +Rule	sol89	1989	only	-	Sep	3	11:59:25s 0:00:35 -
    +Rule	sol89	1989	only	-	Sep	4	11:59:05s 0:00:55 -
    +Rule	sol89	1989	only	-	Sep	5	11:58:45s 0:01:15 -
    +Rule	sol89	1989	only	-	Sep	6	11:58:25s 0:01:35 -
    +Rule	sol89	1989	only	-	Sep	7	11:58:05s 0:01:55 -
    +Rule	sol89	1989	only	-	Sep	8	11:57:45s 0:02:15 -
    +Rule	sol89	1989	only	-	Sep	9	11:57:20s 0:02:40 -
    +Rule	sol89	1989	only	-	Sep	10	11:57:00s 0:03:00 -
    +Rule	sol89	1989	only	-	Sep	11	11:56:40s 0:03:20 -
    +Rule	sol89	1989	only	-	Sep	12	11:56:20s 0:03:40 -
    +Rule	sol89	1989	only	-	Sep	13	11:56:00s 0:04:00 -
    +Rule	sol89	1989	only	-	Sep	14	11:55:35s 0:04:25 -
    +Rule	sol89	1989	only	-	Sep	15	11:55:15s 0:04:45 -
    +Rule	sol89	1989	only	-	Sep	16	11:54:55s 0:05:05 -
    +Rule	sol89	1989	only	-	Sep	17	11:54:35s 0:05:25 -
    +Rule	sol89	1989	only	-	Sep	18	11:54:10s 0:05:50 -
    +Rule	sol89	1989	only	-	Sep	19	11:53:50s 0:06:10 -
    +Rule	sol89	1989	only	-	Sep	20	11:53:30s 0:06:30 -
    +Rule	sol89	1989	only	-	Sep	21	11:53:10s 0:06:50 -
    +Rule	sol89	1989	only	-	Sep	22	11:52:45s 0:07:15 -
    +Rule	sol89	1989	only	-	Sep	23	11:52:25s 0:07:35 -
    +Rule	sol89	1989	only	-	Sep	24	11:52:05s 0:07:55 -
    +Rule	sol89	1989	only	-	Sep	25	11:51:45s 0:08:15 -
    +Rule	sol89	1989	only	-	Sep	26	11:51:25s 0:08:35 -
    +Rule	sol89	1989	only	-	Sep	27	11:51:05s 0:08:55 -
    +Rule	sol89	1989	only	-	Sep	28	11:50:40s 0:09:20 -
    +Rule	sol89	1989	only	-	Sep	29	11:50:20s 0:09:40 -
    +Rule	sol89	1989	only	-	Sep	30	11:50:00s 0:10:00 -
    +Rule	sol89	1989	only	-	Oct	1	11:49:45s 0:10:15 -
    +Rule	sol89	1989	only	-	Oct	2	11:49:25s 0:10:35 -
    +Rule	sol89	1989	only	-	Oct	3	11:49:05s 0:10:55 -
    +Rule	sol89	1989	only	-	Oct	4	11:48:45s 0:11:15 -
    +Rule	sol89	1989	only	-	Oct	5	11:48:30s 0:11:30 -
    +Rule	sol89	1989	only	-	Oct	6	11:48:10s 0:11:50 -
    +Rule	sol89	1989	only	-	Oct	7	11:47:50s 0:12:10 -
    +Rule	sol89	1989	only	-	Oct	8	11:47:35s 0:12:25 -
    +Rule	sol89	1989	only	-	Oct	9	11:47:20s 0:12:40 -
    +Rule	sol89	1989	only	-	Oct	10	11:47:00s 0:13:00 -
    +Rule	sol89	1989	only	-	Oct	11	11:46:45s 0:13:15 -
    +Rule	sol89	1989	only	-	Oct	12	11:46:30s 0:13:30 -
    +Rule	sol89	1989	only	-	Oct	13	11:46:15s 0:13:45 -
    +Rule	sol89	1989	only	-	Oct	14	11:46:00s 0:14:00 -
    +Rule	sol89	1989	only	-	Oct	15	11:45:50s 0:14:10 -
    +Rule	sol89	1989	only	-	Oct	16	11:45:35s 0:14:25 -
    +Rule	sol89	1989	only	-	Oct	17	11:45:20s 0:14:40 -
    +Rule	sol89	1989	only	-	Oct	18	11:45:10s 0:14:50 -
    +Rule	sol89	1989	only	-	Oct	19	11:45:00s 0:15:00 -
    +Rule	sol89	1989	only	-	Oct	20	11:44:50s 0:15:10 -
    +Rule	sol89	1989	only	-	Oct	21	11:44:40s 0:15:20 -
    +Rule	sol89	1989	only	-	Oct	22	11:44:30s 0:15:30 -
    +Rule	sol89	1989	only	-	Oct	23	11:44:20s 0:15:40 -
    +Rule	sol89	1989	only	-	Oct	24	11:44:10s 0:15:50 -
    +Rule	sol89	1989	only	-	Oct	25	11:44:05s 0:15:55 -
    +Rule	sol89	1989	only	-	Oct	26	11:44:00s 0:16:00 -
    +Rule	sol89	1989	only	-	Oct	27	11:43:50s 0:16:10 -
    +Rule	sol89	1989	only	-	Oct	28	11:43:45s 0:16:15 -
    +Rule	sol89	1989	only	-	Oct	29	11:43:40s 0:16:20 -
    +Rule	sol89	1989	only	-	Oct	30	11:43:40s 0:16:20 -
    +Rule	sol89	1989	only	-	Oct	31	11:43:35s 0:16:25 -
    +Rule	sol89	1989	only	-	Nov	1	11:43:35s 0:16:25 -
    +Rule	sol89	1989	only	-	Nov	2	11:43:35s 0:16:25 -
    +Rule	sol89	1989	only	-	Nov	3	11:43:30s 0:16:30 -
    +Rule	sol89	1989	only	-	Nov	4	11:43:35s 0:16:25 -
    +Rule	sol89	1989	only	-	Nov	5	11:43:35s 0:16:25 -
    +Rule	sol89	1989	only	-	Nov	6	11:43:35s 0:16:25 -
    +Rule	sol89	1989	only	-	Nov	7	11:43:40s 0:16:20 -
    +Rule	sol89	1989	only	-	Nov	8	11:43:45s 0:16:15 -
    +Rule	sol89	1989	only	-	Nov	9	11:43:50s 0:16:10 -
    +Rule	sol89	1989	only	-	Nov	10	11:43:55s 0:16:05 -
    +Rule	sol89	1989	only	-	Nov	11	11:44:00s 0:16:00 -
    +Rule	sol89	1989	only	-	Nov	12	11:44:05s 0:15:55 -
    +Rule	sol89	1989	only	-	Nov	13	11:44:15s 0:15:45 -
    +Rule	sol89	1989	only	-	Nov	14	11:44:25s 0:15:35 -
    +Rule	sol89	1989	only	-	Nov	15	11:44:35s 0:15:25 -
    +Rule	sol89	1989	only	-	Nov	16	11:44:45s 0:15:15 -
    +Rule	sol89	1989	only	-	Nov	17	11:44:55s 0:15:05 -
    +Rule	sol89	1989	only	-	Nov	18	11:45:10s 0:14:50 -
    +Rule	sol89	1989	only	-	Nov	19	11:45:20s 0:14:40 -
    +Rule	sol89	1989	only	-	Nov	20	11:45:35s 0:14:25 -
    +Rule	sol89	1989	only	-	Nov	21	11:45:50s 0:14:10 -
    +Rule	sol89	1989	only	-	Nov	22	11:46:05s 0:13:55 -
    +Rule	sol89	1989	only	-	Nov	23	11:46:25s 0:13:35 -
    +Rule	sol89	1989	only	-	Nov	24	11:46:40s 0:13:20 -
    +Rule	sol89	1989	only	-	Nov	25	11:47:00s 0:13:00 -
    +Rule	sol89	1989	only	-	Nov	26	11:47:20s 0:12:40 -
    +Rule	sol89	1989	only	-	Nov	27	11:47:35s 0:12:25 -
    +Rule	sol89	1989	only	-	Nov	28	11:47:55s 0:12:05 -
    +Rule	sol89	1989	only	-	Nov	29	11:48:20s 0:11:40 -
    +Rule	sol89	1989	only	-	Nov	30	11:48:40s 0:11:20 -
    +Rule	sol89	1989	only	-	Dec	1	11:49:00s 0:11:00 -
    +Rule	sol89	1989	only	-	Dec	2	11:49:25s 0:10:35 -
    +Rule	sol89	1989	only	-	Dec	3	11:49:50s 0:10:10 -
    +Rule	sol89	1989	only	-	Dec	4	11:50:15s 0:09:45 -
    +Rule	sol89	1989	only	-	Dec	5	11:50:35s 0:09:25 -
    +Rule	sol89	1989	only	-	Dec	6	11:51:00s 0:09:00 -
    +Rule	sol89	1989	only	-	Dec	7	11:51:30s 0:08:30 -
    +Rule	sol89	1989	only	-	Dec	8	11:51:55s 0:08:05 -
    +Rule	sol89	1989	only	-	Dec	9	11:52:20s 0:07:40 -
    +Rule	sol89	1989	only	-	Dec	10	11:52:50s 0:07:10 -
    +Rule	sol89	1989	only	-	Dec	11	11:53:15s 0:06:45 -
    +Rule	sol89	1989	only	-	Dec	12	11:53:45s 0:06:15 -
    +Rule	sol89	1989	only	-	Dec	13	11:54:10s 0:05:50 -
    +Rule	sol89	1989	only	-	Dec	14	11:54:40s 0:05:20 -
    +Rule	sol89	1989	only	-	Dec	15	11:55:10s 0:04:50 -
    +Rule	sol89	1989	only	-	Dec	16	11:55:40s 0:04:20 -
    +Rule	sol89	1989	only	-	Dec	17	11:56:05s 0:03:55 -
    +Rule	sol89	1989	only	-	Dec	18	11:56:35s 0:03:25 -
    +Rule	sol89	1989	only	-	Dec	19	11:57:05s 0:02:55 -
    +Rule	sol89	1989	only	-	Dec	20	11:57:35s 0:02:25 -
    +Rule	sol89	1989	only	-	Dec	21	11:58:05s 0:01:55 -
    +Rule	sol89	1989	only	-	Dec	22	11:58:35s 0:01:25 -
    +Rule	sol89	1989	only	-	Dec	23	11:59:05s 0:00:55 -
    +Rule	sol89	1989	only	-	Dec	24	11:59:35s 0:00:25 -
    +Rule	sol89	1989	only	-	Dec	25	12:00:05s -0:00:05 -
    +Rule	sol89	1989	only	-	Dec	26	12:00:35s -0:00:35 -
    +Rule	sol89	1989	only	-	Dec	27	12:01:05s -0:01:05 -
    +Rule	sol89	1989	only	-	Dec	28	12:01:35s -0:01:35 -
    +Rule	sol89	1989	only	-	Dec	29	12:02:00s -0:02:00 -
    +Rule	sol89	1989	only	-	Dec	30	12:02:30s -0:02:30 -
    +Rule	sol89	1989	only	-	Dec	31	12:03:00s -0:03:00 -
    +
    +# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs
    +# Before and after 1989, we'll operate on local mean solar time.
    +
    +# Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
    +Zone	Asia/Riyadh89	3:07:04	-		zzz	1989
    +			3:07:04	sol89		zzz	1990
    +			3:07:04	-		zzz
    +# For backward compatibility...
    +Link	Asia/Riyadh89	Mideast/Riyadh89
    diff --git a/examples/tz/southamerica b/examples/tz/southamerica
    new file mode 100644
    index 0000000..af0042b
    --- /dev/null
    +++ b/examples/tz/southamerica
    @@ -0,0 +1,506 @@
    +Rule	Arg	1930	only	-	Dec	 1	0:00	1:00	S
    +Rule	Arg	1931	only	-	Apr	 1	0:00	0	-
    +Rule	Arg	1931	only	-	Oct	15	0:00	1:00	S
    +Rule	Arg	1932	1940	-	Mar	 1	0:00	0	-
    +Rule	Arg	1932	1939	-	Nov	 1	0:00	1:00	S
    +Rule	Arg	1940	only	-	Jul	 1	0:00	1:00	S
    +Rule	Arg	1941	only	-	Jun	15	0:00	0	-
    +Rule	Arg	1941	only	-	Oct	15	0:00	1:00	S
    +Rule	Arg	1943	only	-	Aug	 1	0:00	0	-
    +Rule	Arg	1943	only	-	Oct	15	0:00	1:00	S
    +Rule	Arg	1946	only	-	Mar	 1	0:00	0	-
    +Rule	Arg	1946	only	-	Oct	 1	0:00	1:00	S
    +Rule	Arg	1963	only	-	Oct	 1	0:00	0	-
    +Rule	Arg	1963	only	-	Dec	15	0:00	1:00	S
    +Rule	Arg	1964	1966	-	Mar	 1	0:00	0	-
    +Rule	Arg	1964	1966	-	Oct	15	0:00	1:00	S
    +Rule	Arg	1967	only	-	Apr	 2	0:00	0	-
    +Rule	Arg	1967	1968	-	Oct	Sun>=1	0:00	1:00	S
    +Rule	Arg	1968	1969	-	Apr	Sun>=1	0:00	0	-
    +Rule	Arg	1974	only	-	Jan	23	0:00	1:00	S
    +Rule	Arg	1974	only	-	May	 1	0:00	0	-
    +Rule	Arg	1988	only	-	Dec	 1	0:00	1:00	S
    +Rule	Arg	1989	1993	-	Mar	Sun>=1	0:00	0	-
    +Rule	Arg	1989	1992	-	Oct	Sun>=15	0:00	1:00	S
    +Rule	Arg	1999	only	-	Oct	Sun>=1	0:00	1:00	S
    +Rule	Arg	2000	only	-	Mar	3	0:00	0	-
    +Rule	Arg	2007	only	-	Dec	30	0:00	1:00	S
    +Rule	Arg	2008	2009	-	Mar	Sun>=15	0:00	0	-
    +Rule	Arg	2008	only	-	Oct	Sun>=15	0:00	1:00	S
    + 
    +Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
    +			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1999 Oct  3
    +			-4:00	Arg	AR%sT	2000 Mar  3
    +			-3:00	Arg	AR%sT
    +Zone America/Argentina/Cordoba -4:16:48 - LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1991 Mar  3
    +			-4:00	-	WART	1991 Oct 20
    +			-3:00	Arg	AR%sT	1999 Oct  3
    +			-4:00	Arg	AR%sT	2000 Mar  3
    +			-3:00	Arg	AR%sT
    +Zone America/Argentina/Salta -4:21:40 - LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1991 Mar  3
    +			-4:00	-	WART	1991 Oct 20
    +			-3:00	Arg	AR%sT	1999 Oct  3
    +			-4:00	Arg	AR%sT	2000 Mar  3
    +			-3:00	Arg	AR%sT	2008 Oct 18
    +			-3:00	-	ART
    +Zone America/Argentina/Tucuman -4:20:52 - LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1991 Mar  3
    +			-4:00	-	WART	1991 Oct 20
    +			-3:00	Arg	AR%sT	1999 Oct  3
    +			-4:00	Arg	AR%sT	2000 Mar  3
    +			-3:00	-	ART	2004 Jun  1
    +			-4:00	-	WART	2004 Jun 13
    +			-3:00	Arg	AR%sT
    +Zone America/Argentina/La_Rioja -4:27:24 - LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1991 Mar  1
    +			-4:00	-	WART	1991 May  7
    +			-3:00	Arg	AR%sT	1999 Oct  3
    +			-4:00	Arg	AR%sT	2000 Mar  3
    +			-3:00	-	ART	2004 Jun  1
    +			-4:00	-	WART	2004 Jun 20
    +			-3:00	Arg	AR%sT	2008 Oct 18
    +			-3:00	-	ART
    +Zone America/Argentina/San_Juan -4:34:04 - LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1991 Mar  1
    +			-4:00	-	WART	1991 May  7
    +			-3:00	Arg	AR%sT	1999 Oct  3
    +			-4:00	Arg	AR%sT	2000 Mar  3
    +			-3:00	-	ART	2004 May 31
    +			-4:00	-	WART	2004 Jul 25
    +			-3:00	Arg	AR%sT	2008 Oct 18
    +			-3:00	-	ART
    +Zone America/Argentina/Jujuy -4:21:12 -	LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1990 Mar  4
    +			-4:00	-	WART	1990 Oct 28
    +			-4:00	1:00	WARST	1991 Mar 17
    +			-4:00	-	WART	1991 Oct  6
    +			-3:00	1:00	ARST	1992
    +			-3:00	Arg	AR%sT	1999 Oct  3
    +			-4:00	Arg	AR%sT	2000 Mar  3
    +			-3:00	Arg	AR%sT	2008 Oct 18
    +			-3:00	-	ART
    +Zone America/Argentina/Catamarca -4:23:08 - LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1991 Mar  3
    +			-4:00	-	WART	1991 Oct 20
    +			-3:00	Arg	AR%sT	1999 Oct  3
    +			-4:00	Arg	AR%sT	2000 Mar  3
    +			-3:00	-	ART	2004 Jun  1
    +			-4:00	-	WART	2004 Jun 20
    +			-3:00	Arg	AR%sT	2008 Oct 18
    +			-3:00	-	ART
    +Zone America/Argentina/Mendoza -4:35:16 - LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1990 Mar  4
    +			-4:00	-	WART	1990 Oct 15
    +			-4:00	1:00	WARST	1991 Mar  1
    +			-4:00	-	WART	1991 Oct 15
    +			-4:00	1:00	WARST	1992 Mar  1
    +			-4:00	-	WART	1992 Oct 18
    +			-3:00	Arg	AR%sT	1999 Oct  3
    +			-4:00	Arg	AR%sT	2000 Mar  3
    +			-3:00	-	ART	2004 May 23
    +			-4:00	-	WART	2004 Sep 26
    +			-3:00	Arg	AR%sT	2008 Oct 18
    +			-3:00	-	ART
    +Rule	SanLuis	2008	2009	-	Mar	Sun>=8	0:00	0	-
    +Rule	SanLuis	2007	2009	-	Oct	Sun>=8	0:00	1:00	S
    +Zone America/Argentina/San_Luis -4:25:24 - LMT	1894 Oct 31
    +			-4:16:48 -	CMT	1920 May
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1990
    +			-3:00	1:00	ARST	1990 Mar 14
    +			-4:00	-	WART	1990 Oct 15
    +			-4:00	1:00	WARST	1991 Mar  1
    +			-4:00	-	WART	1991 Jun  1
    +			-3:00	-	ART	1999 Oct  3
    +			-4:00	1:00	WARST	2000 Mar  3
    +			-3:00	-	ART	2004 May 31
    +			-4:00	-	WART	2004 Jul 25
    +			-3:00	Arg	AR%sT	2008 Jan 21
    +			-4:00	SanLuis	WAR%sT
    +Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
    +			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1999 Oct  3
    +			-4:00	Arg	AR%sT	2000 Mar  3
    +			-3:00	-	ART	2004 Jun  1
    +			-4:00	-	WART	2004 Jun 20
    +			-3:00	Arg	AR%sT	2008 Oct 18
    +			-3:00	-	ART
    +Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
    +			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
    +			-4:00	-	ART	1930 Dec
    +			-4:00	Arg	AR%sT	1969 Oct  5
    +			-3:00	Arg	AR%sT	1999 Oct  3
    +			-4:00	Arg	AR%sT	2000 Mar  3
    +			-3:00	-	ART	2004 May 30
    +			-4:00	-	WART	2004 Jun 20
    +			-3:00	Arg	AR%sT	2008 Oct 18
    +			-3:00	-	ART
    +Zone	America/Aruba	-4:40:24 -	LMT	1912 Feb 12	# Oranjestad
    +			-4:30	-	ANT	1965 # Netherlands Antilles Time
    +			-4:00	-	AST
    +Zone	America/La_Paz	-4:32:36 -	LMT	1890
    +			-4:32:36 -	CMT	1931 Oct 15 # Calamarca MT
    +			-4:32:36 1:00	BOST	1932 Mar 21 # Bolivia ST
    +			-4:00	-	BOT	# Bolivia Time
    +Rule	Brazil	1931	only	-	Oct	 3	11:00	1:00	S
    +Rule	Brazil	1932	1933	-	Apr	 1	 0:00	0	-
    +Rule	Brazil	1932	only	-	Oct	 3	 0:00	1:00	S
    +Rule	Brazil	1949	1952	-	Dec	 1	 0:00	1:00	S
    +Rule	Brazil	1950	only	-	Apr	16	 1:00	0	-
    +Rule	Brazil	1951	1952	-	Apr	 1	 0:00	0	-
    +Rule	Brazil	1953	only	-	Mar	 1	 0:00	0	-
    +Rule	Brazil	1963	only	-	Dec	 9	 0:00	1:00	S
    +Rule	Brazil	1964	only	-	Mar	 1	 0:00	0	-
    +Rule	Brazil	1965	only	-	Jan	31	 0:00	1:00	S
    +Rule	Brazil	1965	only	-	Mar	31	 0:00	0	-
    +Rule	Brazil	1965	only	-	Dec	 1	 0:00	1:00	S
    +Rule	Brazil	1966	1968	-	Mar	 1	 0:00	0	-
    +Rule	Brazil	1966	1967	-	Nov	 1	 0:00	1:00	S
    +Rule	Brazil	1985	only	-	Nov	 2	 0:00	1:00	S
    +Rule	Brazil	1986	only	-	Mar	15	 0:00	0	-
    +Rule	Brazil	1986	only	-	Oct	25	 0:00	1:00	S
    +Rule	Brazil	1987	only	-	Feb	14	 0:00	0	-
    +Rule	Brazil	1987	only	-	Oct	25	 0:00	1:00	S
    +Rule	Brazil	1988	only	-	Feb	 7	 0:00	0	-
    +Rule	Brazil	1988	only	-	Oct	16	 0:00	1:00	S
    +Rule	Brazil	1989	only	-	Jan	29	 0:00	0	-
    +Rule	Brazil	1989	only	-	Oct	15	 0:00	1:00	S
    +Rule	Brazil	1990	only	-	Feb	11	 0:00	0	-
    +Rule	Brazil	1990	only	-	Oct	21	 0:00	1:00	S
    +Rule	Brazil	1991	only	-	Feb	17	 0:00	0	-
    +Rule	Brazil	1991	only	-	Oct	20	 0:00	1:00	S
    +Rule	Brazil	1992	only	-	Feb	 9	 0:00	0	-
    +Rule	Brazil	1992	only	-	Oct	25	 0:00	1:00	S
    +Rule	Brazil	1993	only	-	Jan	31	 0:00	0	-
    +Rule	Brazil	1993	1995	-	Oct	Sun>=11	 0:00	1:00	S
    +Rule	Brazil	1994	1995	-	Feb	Sun>=15	 0:00	0	-
    +Rule	Brazil	1996	only	-	Feb	11	 0:00	0	-
    +Rule	Brazil	1996	only	-	Oct	 6	 0:00	1:00	S
    +Rule	Brazil	1997	only	-	Feb	16	 0:00	0	-
    +Rule	Brazil	1997	only	-	Oct	 6	 0:00	1:00	S
    +Rule	Brazil	1998	only	-	Mar	 1	 0:00	0	-
    +Rule	Brazil	1998	only	-	Oct	11	 0:00	1:00	S
    +Rule	Brazil	1999	only	-	Feb	21	 0:00	0	-
    +Rule	Brazil	1999	only	-	Oct	 3	 0:00	1:00	S
    +Rule	Brazil	2000	only	-	Feb	27	 0:00	0	-
    +Rule	Brazil	2000	2001	-	Oct	Sun>=8	 0:00	1:00	S
    +Rule	Brazil	2001	2006	-	Feb	Sun>=15	 0:00	0	-
    +Rule	Brazil	2002	only	-	Nov	 3	 0:00	1:00	S
    +Rule	Brazil	2003	only	-	Oct	19	 0:00	1:00	S
    +Rule	Brazil	2004	only	-	Nov	 2	 0:00	1:00	S
    +Rule	Brazil	2005	only	-	Oct	16	 0:00	1:00	S
    +Rule	Brazil	2006	only	-	Nov	 5	 0:00	1:00	S
    +Rule	Brazil	2007	only	-	Feb	25	 0:00	0	-
    +Rule	Brazil	2007	only	-	Oct	Sun>=8	 0:00	1:00	S
    +Rule	Brazil	2008	max	-	Oct	Sun>=15	0:00	1:00	S
    +Rule	Brazil	2008	2011	-	Feb	Sun>=15	0:00	0	-
    +Rule	Brazil	2012	only	-	Feb	Sun>=22	0:00	0	-
    +Rule	Brazil	2013	2014	-	Feb	Sun>=15	0:00	0	-
    +Rule	Brazil	2015	only	-	Feb	Sun>=22	0:00	0	-
    +Rule	Brazil	2016	2022	-	Feb	Sun>=15	0:00	0	-
    +Rule	Brazil	2023	only	-	Feb	Sun>=22	0:00	0	-
    +Rule	Brazil	2024	2025	-	Feb	Sun>=15	0:00	0	-
    +Rule	Brazil	2026	only	-	Feb	Sun>=22	0:00	0	-
    +Rule	Brazil	2027	2033	-	Feb	Sun>=15	0:00	0	-
    +Rule	Brazil	2034	only	-	Feb	Sun>=22	0:00	0	-
    +Rule	Brazil	2035	2036	-	Feb	Sun>=15	0:00	0	-
    +Rule	Brazil	2037	only	-	Feb	Sun>=22	0:00	0	-
    +Rule	Brazil	2038	max	-	Feb	Sun>=15	0:00	0	-
    +Zone America/Noronha	-2:09:40 -	LMT	1914
    +			-2:00	Brazil	FN%sT	1990 Sep 17
    +			-2:00	-	FNT	1999 Sep 30
    +			-2:00	Brazil	FN%sT	2000 Oct 15
    +			-2:00	-	FNT	2001 Sep 13
    +			-2:00	Brazil	FN%sT	2002 Oct  1
    +			-2:00	-	FNT
    +Zone America/Belem	-3:13:56 -	LMT	1914
    +			-3:00	Brazil	BR%sT	1988 Sep 12
    +			-3:00	-	BRT
    +Zone America/Santarem	-3:38:48 -	LMT	1914
    +			-4:00	Brazil	AM%sT	1988 Sep 12
    +			-4:00	-	AMT	2008 Jun 24 00:00
    +			-3:00	-	BRT
    +Zone America/Fortaleza	-2:34:00 -	LMT	1914
    +			-3:00	Brazil	BR%sT	1990 Sep 17
    +			-3:00	-	BRT	1999 Sep 30
    +			-3:00	Brazil	BR%sT	2000 Oct 22
    +			-3:00	-	BRT	2001 Sep 13
    +			-3:00	Brazil	BR%sT	2002 Oct  1
    +			-3:00	-	BRT
    +Zone America/Recife	-2:19:36 -	LMT	1914
    +			-3:00	Brazil	BR%sT	1990 Sep 17
    +			-3:00	-	BRT	1999 Sep 30
    +			-3:00	Brazil	BR%sT	2000 Oct 15
    +			-3:00	-	BRT	2001 Sep 13
    +			-3:00	Brazil	BR%sT	2002 Oct  1
    +			-3:00	-	BRT
    +Zone America/Araguaina	-3:12:48 -	LMT	1914
    +			-3:00	Brazil	BR%sT	1990 Sep 17
    +			-3:00	-	BRT	1995 Sep 14
    +			-3:00	Brazil	BR%sT	2003 Sep 24
    +			-3:00	-	BRT
    +Zone America/Maceio	-2:22:52 -	LMT	1914
    +			-3:00	Brazil	BR%sT	1990 Sep 17
    +			-3:00	-	BRT	1995 Oct 13
    +			-3:00	Brazil	BR%sT	1996 Sep  4
    +			-3:00	-	BRT	1999 Sep 30
    +			-3:00	Brazil	BR%sT	2000 Oct 22
    +			-3:00	-	BRT	2001 Sep 13
    +			-3:00	Brazil	BR%sT	2002 Oct  1
    +			-3:00	-	BRT
    +Zone America/Bahia	-2:34:04 -	LMT	1914
    +			-3:00	Brazil	BR%sT	2003 Sep 24
    +			-3:00	-	BRT
    +Zone America/Sao_Paulo	-3:06:28 -	LMT	1914
    +			-3:00	Brazil	BR%sT	1963 Oct 23 00:00
    +			-3:00	1:00	BRST	1964
    +			-3:00	Brazil	BR%sT
    +Zone America/Campo_Grande -3:38:28 -	LMT	1914
    +			-4:00	Brazil	AM%sT
    +Zone America/Cuiaba	-3:44:20 -	LMT	1914
    +			-4:00	Brazil	AM%sT	2003 Sep 24
    +			-4:00	-	AMT	2004 Oct  1
    +			-4:00	Brazil	AM%sT
    +Zone America/Porto_Velho -4:15:36 -	LMT	1914
    +			-4:00	Brazil	AM%sT	1988 Sep 12
    +			-4:00	-	AMT
    +Zone America/Boa_Vista	-4:02:40 -	LMT	1914
    +			-4:00	Brazil	AM%sT	1988 Sep 12
    +			-4:00	-	AMT	1999 Sep 30
    +			-4:00	Brazil	AM%sT	2000 Oct 15
    +			-4:00	-	AMT
    +Zone America/Manaus	-4:00:04 -	LMT	1914
    +			-4:00	Brazil	AM%sT	1988 Sep 12
    +			-4:00	-	AMT	1993 Sep 28
    +			-4:00	Brazil	AM%sT	1994 Sep 22
    +			-4:00	-	AMT
    +Zone America/Eirunepe	-4:39:28 -	LMT	1914
    +			-5:00	Brazil	AC%sT	1988 Sep 12
    +			-5:00	-	ACT	1993 Sep 28
    +			-5:00	Brazil	AC%sT	1994 Sep 22
    +			-5:00	-	ACT	2008 Jun 24 00:00
    +			-4:00	-	AMT
    +Zone America/Rio_Branco	-4:31:12 -	LMT	1914
    +			-5:00	Brazil	AC%sT	1988 Sep 12
    +			-5:00	-	ACT	2008 Jun 24 00:00
    +			-4:00	-	AMT
    +Rule	Chile	1927	1932	-	Sep	 1	0:00	1:00	S
    +Rule	Chile	1928	1932	-	Apr	 1	0:00	0	-
    +Rule	Chile	1942	only	-	Jun	 1	4:00u	0	-
    +Rule	Chile	1942	only	-	Aug	 1	5:00u	1:00	S
    +Rule	Chile	1946	only	-	Jul	15	4:00u	1:00	S
    +Rule	Chile	1946	only	-	Sep	 1	3:00u	0:00	-
    +Rule	Chile	1947	only	-	Apr	 1	4:00u	0	-
    +Rule	Chile	1968	only	-	Nov	 3	4:00u	1:00	S
    +Rule	Chile	1969	only	-	Mar	30	3:00u	0	-
    +Rule	Chile	1969	only	-	Nov	23	4:00u	1:00	S
    +Rule	Chile	1970	only	-	Mar	29	3:00u	0	-
    +Rule	Chile	1971	only	-	Mar	14	3:00u	0	-
    +Rule	Chile	1970	1972	-	Oct	Sun>=9	4:00u	1:00	S
    +Rule	Chile	1972	1986	-	Mar	Sun>=9	3:00u	0	-
    +Rule	Chile	1973	only	-	Sep	30	4:00u	1:00	S
    +Rule	Chile	1974	1987	-	Oct	Sun>=9	4:00u	1:00	S
    +Rule	Chile	1987	only	-	Apr	12	3:00u	0	-
    +Rule	Chile	1988	1989	-	Mar	Sun>=9	3:00u	0	-
    +Rule	Chile	1988	only	-	Oct	Sun>=1	4:00u	1:00	S
    +Rule	Chile	1989	only	-	Oct	Sun>=9	4:00u	1:00	S
    +Rule	Chile	1990	only	-	Mar	18	3:00u	0	-
    +Rule	Chile	1990	only	-	Sep	16	4:00u	1:00	S
    +Rule	Chile	1991	1996	-	Mar	Sun>=9	3:00u	0	-
    +Rule	Chile	1991	1997	-	Oct	Sun>=9	4:00u	1:00	S
    +Rule	Chile	1997	only	-	Mar	30	3:00u	0	-
    +Rule	Chile	1998	only	-	Mar	Sun>=9	3:00u	0	-
    +Rule	Chile	1998	only	-	Sep	27	4:00u	1:00	S
    +Rule	Chile	1999	only	-	Apr	 4	3:00u	0	-
    +Rule	Chile	1999	max	-	Oct	Sun>=9	4:00u	1:00	S
    +Rule	Chile	2000	2007	-	Mar	Sun>=9	3:00u	0	-
    +Rule	Chile	2008	only	-	Mar	30	3:00u	0	-
    +Rule	Chile	2009	only	-	Mar	Sun>=9	3:00u	0	-
    +Rule	Chile	2010	2011	-	Apr	Sun>=1	3:00u	0	-
    +Rule	Chile	2012	max	-	Mar	Sun>=9	3:00u	0	-
    +Zone America/Santiago	-4:42:46 -	LMT	1890
    +			-4:42:46 -	SMT	1910 	    # Santiago Mean Time
    +			-5:00	-	CLT	1916 Jul  1 # Chile Time
    +			-4:42:46 -	SMT	1918 Sep  1 # Santiago Mean Time
    +			-4:00	-	CLT	1919 Jul  1 # Chile Time
    +			-4:42:46 -	SMT	1927 Sep  1 # Santiago Mean Time
    +			-5:00	Chile	CL%sT	1947 May 22 # Chile Time
    +			-4:00	Chile	CL%sT
    +Zone Pacific/Easter	-7:17:44 -	LMT	1890
    +			-7:17:28 -	EMT	1932 Sep    # Easter Mean Time
    +			-7:00	Chile	EAS%sT	1982 Mar 13 21:00 # Easter I Time
    +			-6:00	Chile	EAS%sT
    +Rule	CO	1992	only	-	May	 3	0:00	1:00	S
    +Rule	CO	1993	only	-	Apr	 4	0:00	0	-
    +Zone	America/Bogota	-4:56:20 -	LMT	1884 Mar 13
    +			-4:56:20 -	BMT	1914 Nov 23 # Bogota Mean Time
    +			-5:00	CO	CO%sT	# Colombia Time
    +Zone	America/Curacao	-4:35:44 -	LMT	1912 Feb 12	# Willemstad
    +			-4:30	-	ANT	1965 # Netherlands Antilles Time
    +			-4:00	-	AST
    +Zone America/Guayaquil	-5:19:20 -	LMT	1890
    +			-5:14:00 -	QMT	1931 # Quito Mean Time
    +			-5:00	-	ECT	     # Ecuador Time
    +Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
    +			-5:00	-	ECT	1986
    +			-6:00	-	GALT	     # Galapagos Time
    +Rule	Falk	1937	1938	-	Sep	lastSun	0:00	1:00	S
    +Rule	Falk	1938	1942	-	Mar	Sun>=19	0:00	0	-
    +Rule	Falk	1939	only	-	Oct	1	0:00	1:00	S
    +Rule	Falk	1940	1942	-	Sep	lastSun	0:00	1:00	S
    +Rule	Falk	1943	only	-	Jan	1	0:00	0	-
    +Rule	Falk	1983	only	-	Sep	lastSun	0:00	1:00	S
    +Rule	Falk	1984	1985	-	Apr	lastSun	0:00	0	-
    +Rule	Falk	1984	only	-	Sep	16	0:00	1:00	S
    +Rule	Falk	1985	2000	-	Sep	Sun>=9	0:00	1:00	S
    +Rule	Falk	1986	2000	-	Apr	Sun>=16	0:00	0	-
    +Rule	Falk	2001	max	-	Apr	Sun>=15	2:00	0	-
    +Rule	Falk	2001	max	-	Sep	Sun>=1	2:00	1:00	S
    +Zone Atlantic/Stanley	-3:51:24 -	LMT	1890
    +			-3:51:24 -	SMT	1912 Mar 12  # Stanley Mean Time
    +			-4:00	Falk	FK%sT	1983 May     # Falkland Is Time
    +			-3:00	Falk	FK%sT	1985 Sep 15
    +			-4:00	Falk	FK%sT
    +Zone America/Cayenne	-3:29:20 -	LMT	1911 Jul
    +			-4:00	-	GFT	1967 Oct # French Guiana Time
    +			-3:00	-	GFT
    +Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar	# Georgetown
    +			-3:45	-	GBGT	1966 May 26 # Br Guiana Time
    +			-3:45	-	GYT	1975 Jul 31 # Guyana Time
    +			-3:00	-	GYT	1991
    +			-4:00	-	GYT
    +Rule	Para	1975	1988	-	Oct	 1	0:00	1:00	S
    +Rule	Para	1975	1978	-	Mar	 1	0:00	0	-
    +Rule	Para	1979	1991	-	Apr	 1	0:00	0	-
    +Rule	Para	1989	only	-	Oct	22	0:00	1:00	S
    +Rule	Para	1990	only	-	Oct	 1	0:00	1:00	S
    +Rule	Para	1991	only	-	Oct	 6	0:00	1:00	S
    +Rule	Para	1992	only	-	Mar	 1	0:00	0	-
    +Rule	Para	1992	only	-	Oct	 5	0:00	1:00	S
    +Rule	Para	1993	only	-	Mar	31	0:00	0	-
    +Rule	Para	1993	1995	-	Oct	 1	0:00	1:00	S
    +Rule	Para	1994	1995	-	Feb	lastSun	0:00	0	-
    +Rule	Para	1996	only	-	Mar	 1	0:00	0	-
    +Rule	Para	1996	2001	-	Oct	Sun>=1	0:00	1:00	S
    +Rule	Para	1997	only	-	Feb	lastSun	0:00	0	-
    +Rule	Para	1998	2001	-	Mar	Sun>=1	0:00	0	-
    +Rule	Para	2002	2004	-	Apr	Sun>=1	0:00	0	-
    +Rule	Para	2002	2003	-	Sep	Sun>=1	0:00	1:00	S
    +Rule	Para	2004	2009	-	Oct	Sun>=15	0:00	1:00	S
    +Rule	Para	2005	2009	-	Mar	Sun>=8	0:00	0	-
    +Rule	Para	2010	max	-	Oct	Sun>=1	0:00	1:00	S
    +Rule	Para	2010	max	-	Apr	Sun>=8	0:00	0	-
    +Zone America/Asuncion	-3:50:40 -	LMT	1890
    +			-3:50:40 -	AMT	1931 Oct 10 # Asuncion Mean Time
    +			-4:00	-	PYT	1972 Oct # Paraguay Time
    +			-3:00	-	PYT	1974 Apr
    +			-4:00	Para	PY%sT
    +Rule	Peru	1938	only	-	Jan	 1	0:00	1:00	S
    +Rule	Peru	1938	only	-	Apr	 1	0:00	0	-
    +Rule	Peru	1938	1939	-	Sep	lastSun	0:00	1:00	S
    +Rule	Peru	1939	1940	-	Mar	Sun>=24	0:00	0	-
    +Rule	Peru	1986	1987	-	Jan	 1	0:00	1:00	S
    +Rule	Peru	1986	1987	-	Apr	 1	0:00	0	-
    +Rule	Peru	1990	only	-	Jan	 1	0:00	1:00	S
    +Rule	Peru	1990	only	-	Apr	 1	0:00	0	-
    +Rule	Peru	1994	only	-	Jan	 1	0:00	1:00	S
    +Rule	Peru	1994	only	-	Apr	 1	0:00	0	-
    +Zone	America/Lima	-5:08:12 -	LMT	1890
    +			-5:08:36 -	LMT	1908 Jul 28 # Lima Mean Time?
    +			-5:00	Peru	PE%sT	# Peru Time
    +Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890		# Grytviken
    +			-2:00	-	GST	# South Georgia Time
    +Zone America/Paramaribo	-3:40:40 -	LMT	1911
    +			-3:40:52 -	PMT	1935     # Paramaribo Mean Time
    +			-3:40:36 -	PMT	1945 Oct # The capital moved?
    +			-3:30	-	NEGT	1975 Nov 20 # Dutch Guiana Time
    +			-3:30	-	SRT	1984 Oct # Suriname Time
    +			-3:00	-	SRT
    +Zone America/Port_of_Spain -4:06:04 -	LMT	1912 Mar 2
    +			-4:00	-	AST
    +Rule	Uruguay	1923	only	-	Oct	 2	 0:00	0:30	HS
    +Rule	Uruguay	1924	1926	-	Apr	 1	 0:00	0	-
    +Rule	Uruguay	1924	1925	-	Oct	 1	 0:00	0:30	HS
    +Rule	Uruguay	1933	1935	-	Oct	lastSun	 0:00	0:30	HS
    +Rule	Uruguay	1934	1936	-	Mar	Sat>=25	23:30s	0	-
    +Rule	Uruguay	1936	only	-	Nov	 1	 0:00	0:30	HS
    +Rule	Uruguay	1937	1941	-	Mar	lastSun	 0:00	0	-
    +Rule	Uruguay	1937	1940	-	Oct	lastSun	 0:00	0:30	HS
    +Rule	Uruguay	1941	only	-	Aug	 1	 0:00	0:30	HS
    +Rule	Uruguay	1942	only	-	Jan	 1	 0:00	0	-
    +Rule	Uruguay	1942	only	-	Dec	14	 0:00	1:00	S
    +Rule	Uruguay	1943	only	-	Mar	14	 0:00	0	-
    +Rule	Uruguay	1959	only	-	May	24	 0:00	1:00	S
    +Rule	Uruguay	1959	only	-	Nov	15	 0:00	0	-
    +Rule	Uruguay	1960	only	-	Jan	17	 0:00	1:00	S
    +Rule	Uruguay	1960	only	-	Mar	 6	 0:00	0	-
    +Rule	Uruguay	1965	1967	-	Apr	Sun>=1	 0:00	1:00	S
    +Rule	Uruguay	1965	only	-	Sep	26	 0:00	0	-
    +Rule	Uruguay	1966	1967	-	Oct	31	 0:00	0	-
    +Rule	Uruguay	1968	1970	-	May	27	 0:00	0:30	HS
    +Rule	Uruguay	1968	1970	-	Dec	 2	 0:00	0	-
    +Rule	Uruguay	1972	only	-	Apr	24	 0:00	1:00	S
    +Rule	Uruguay	1972	only	-	Aug	15	 0:00	0	-
    +Rule	Uruguay	1974	only	-	Mar	10	 0:00	0:30	HS
    +Rule	Uruguay	1974	only	-	Dec	22	 0:00	1:00	S
    +Rule	Uruguay	1976	only	-	Oct	 1	 0:00	0	-
    +Rule	Uruguay	1977	only	-	Dec	 4	 0:00	1:00	S
    +Rule	Uruguay	1978	only	-	Apr	 1	 0:00	0	-
    +Rule	Uruguay	1979	only	-	Oct	 1	 0:00	1:00	S
    +Rule	Uruguay	1980	only	-	May	 1	 0:00	0	-
    +Rule	Uruguay	1987	only	-	Dec	14	 0:00	1:00	S
    +Rule	Uruguay	1988	only	-	Mar	14	 0:00	0	-
    +Rule	Uruguay	1988	only	-	Dec	11	 0:00	1:00	S
    +Rule	Uruguay	1989	only	-	Mar	12	 0:00	0	-
    +Rule	Uruguay	1989	only	-	Oct	29	 0:00	1:00	S
    +Rule	Uruguay	1990	1992	-	Mar	Sun>=1	 0:00	0	-
    +Rule	Uruguay	1990	1991	-	Oct	Sun>=21	 0:00	1:00	S
    +Rule	Uruguay	1992	only	-	Oct	18	 0:00	1:00	S
    +Rule	Uruguay	1993	only	-	Feb	28	 0:00	0	-
    +Rule	Uruguay	2004	only	-	Sep	19	 0:00	1:00	S
    +Rule	Uruguay	2005	only	-	Mar	27	 2:00	0	-
    +Rule	Uruguay	2005	only	-	Oct	 9	 2:00	1:00	S
    +Rule	Uruguay	2006	only	-	Mar	12	 2:00	0	-
    +Rule	Uruguay	2006	max	-	Oct	Sun>=1	 2:00	1:00	S
    +Rule	Uruguay	2007	max	-	Mar	Sun>=8	 2:00	0	-
    +Zone America/Montevideo	-3:44:44 -	LMT	1898 Jun 28
    +			-3:44:44 -	MMT	1920 May  1	# Montevideo MT
    +			-3:30	Uruguay	UY%sT	1942 Dec 14	# Uruguay Time
    +			-3:00	Uruguay	UY%sT
    +Zone	America/Caracas	-4:27:44 -	LMT	1890
    +			-4:27:40 -	CMT	1912 Feb 12 # Caracas Mean Time?
    +			-4:30	-	VET	1965	     # Venezuela Time
    +			-4:00	-	VET	2007 Dec  9 03:00
    +			-4:30	-	VET
    diff --git a/examples/tz/systemv b/examples/tz/systemv
    new file mode 100644
    index 0000000..767388d
    --- /dev/null
    +++ b/examples/tz/systemv
    @@ -0,0 +1,39 @@
    +# 
    +# @(#)systemv	8.2
    +# This file is in the public domain, so clarified as of
    +# 2009-05-17 by Arthur David Olson.
    +
    +# Old rules, should the need arise.
    +# No attempt is made to handle Newfoundland, since it cannot be expressed
    +# using the System V "TZ" scheme (half-hour offset), or anything outside
    +# North America (no support for non-standard DST start/end dates), nor
    +# the changes in the DST rules in the US after 1976 (which occurred after
    +# the old rules were written).
    +#
    +# If you need the old rules, uncomment ## lines.
    +# Compile this *without* leap second correction for true conformance.
    +
    +# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
    +Rule	SystemV	min	1973	-	Apr	lastSun	2:00	1:00	D
    +Rule	SystemV	min	1973	-	Oct	lastSun	2:00	0	S
    +Rule	SystemV	1974	only	-	Jan	6	2:00	1:00	D
    +Rule	SystemV	1974	only	-	Nov	lastSun	2:00	0	S
    +Rule	SystemV	1975	only	-	Feb	23	2:00	1:00	D
    +Rule	SystemV	1975	only	-	Oct	lastSun	2:00	0	S
    +Rule	SystemV	1976	max	-	Apr	lastSun	2:00	1:00	D
    +Rule	SystemV	1976	max	-	Oct	lastSun	2:00	0	S
    +
    +# Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
    +## Zone	SystemV/AST4ADT	-4:00	SystemV		A%sT
    +## Zone	SystemV/EST5EDT	-5:00	SystemV		E%sT
    +## Zone	SystemV/CST6CDT	-6:00	SystemV		C%sT
    +## Zone	SystemV/MST7MDT	-7:00	SystemV		M%sT
    +## Zone	SystemV/PST8PDT	-8:00	SystemV		P%sT
    +## Zone	SystemV/YST9YDT	-9:00	SystemV		Y%sT
    +## Zone	SystemV/AST4	-4:00	-		AST
    +## Zone	SystemV/EST5	-5:00	-		EST
    +## Zone	SystemV/CST6	-6:00	-		CST
    +## Zone	SystemV/MST7	-7:00	-		MST
    +## Zone	SystemV/PST8	-8:00	-		PST
    +## Zone	SystemV/YST9	-9:00	-		YST
    +## Zone	SystemV/HST10	-10:00	-		HST
    diff --git a/examples/tz/yearistype.sh b/examples/tz/yearistype.sh
    new file mode 100644
    index 0000000..66dbf89
    --- /dev/null
    +++ b/examples/tz/yearistype.sh
    @@ -0,0 +1,40 @@
    +#! /bin/sh
    +
    +: 'This file is in the public domain, so clarified as of'
    +: '2006-07-17 by Arthur David Olson.'
    +
    +: '@(#)yearistype.sh	8.2'
    +
    +case $#-$1 in
    +	2-|2-0*|2-*[!0-9]*)
    +		echo "$0: wild year - $1" >&2
    +		exit 1 ;;
    +esac
    +
    +case $#-$2 in
    +	2-even)
    +		case $1 in
    +			*[24680])			exit 0 ;;
    +			*)				exit 1 ;;
    +		esac ;;
    +	2-nonpres|2-nonuspres)
    +		case $1 in
    +			*[02468][048]|*[13579][26])	exit 1 ;;
    +			*)				exit 0 ;;
    +		esac ;;
    +	2-odd)
    +		case $1 in
    +			*[13579])			exit 0 ;;
    +			*)				exit 1 ;;
    +		esac ;;
    +	2-uspres)
    +		case $1 in
    +			*[02468][048]|*[13579][26])	exit 0 ;;
    +			*)				exit 1 ;;
    +		esac ;;
    +	2-*)
    +		echo "$0: wild type - $2" >&2 ;;
    +esac
    +
    +echo "$0: usage is $0 year even|odd|uspres|nonpres|nonuspres" >&2
    +exit 1
    diff --git a/examples/tz/zone.tab b/examples/tz/zone.tab
    new file mode 100644
    index 0000000..03a93a4
    --- /dev/null
    +++ b/examples/tz/zone.tab
    @@ -0,0 +1,437 @@
    +# 
    +# @(#)zone.tab	8.41
    +# This file is in the public domain, so clarified as of
    +# 2009-05-17 by Arthur David Olson.
    +#
    +# TZ zone descriptions
    +#
    +# From Paul Eggert (1996-08-05):
    +#
    +# This file contains a table with the following columns:
    +# 1.  ISO 3166 2-character country code.  See the file `iso3166.tab'.
    +# 2.  Latitude and longitude of the zone's principal location
    +#     in ISO 6709 sign-degrees-minutes-seconds format,
    +#     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
    +#     first latitude (+ is north), then longitude (+ is east).
    +# 3.  Zone name used in value of TZ environment variable.
    +# 4.  Comments; present if and only if the country has multiple rows.
    +#
    +# Columns are separated by a single tab.
    +# The table is sorted first by country, then an order within the country that
    +# (1) makes some geographical sense, and
    +# (2) puts the most populous zones first, where that does not contradict (1).
    +#
    +# Lines beginning with `#' are comments.
    +#
    +#country-
    +#code	coordinates	TZ			comments
    +AD	+4230+00131	Europe/Andorra
    +AE	+2518+05518	Asia/Dubai
    +AF	+3431+06912	Asia/Kabul
    +AG	+1703-06148	America/Antigua
    +AI	+1812-06304	America/Anguilla
    +AL	+4120+01950	Europe/Tirane
    +AM	+4011+04430	Asia/Yerevan
    +AN	+1211-06900	America/Curacao
    +AO	-0848+01314	Africa/Luanda
    +AQ	-7750+16636	Antarctica/McMurdo	McMurdo Station, Ross Island
    +AQ	-9000+00000	Antarctica/South_Pole	Amundsen-Scott Station, South Pole
    +AQ	-6734-06808	Antarctica/Rothera	Rothera Station, Adelaide Island
    +AQ	-6448-06406	Antarctica/Palmer	Palmer Station, Anvers Island
    +AQ	-6736+06253	Antarctica/Mawson	Mawson Station, Holme Bay
    +AQ	-6835+07758	Antarctica/Davis	Davis Station, Vestfold Hills
    +AQ	-6617+11031	Antarctica/Casey	Casey Station, Bailey Peninsula
    +AQ	-7824+10654	Antarctica/Vostok	Vostok Station, Lake Vostok
    +AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Terre Adelie
    +AQ	-690022+0393524	Antarctica/Syowa	Syowa Station, E Ongul I
    +AQ	-5430+15857	Antarctica/Macquarie	Macquarie Island Station, Macquarie Island
    +AR	-3436-05827	America/Argentina/Buenos_Aires	Buenos Aires (BA, CF)
    +AR	-3124-06411	America/Argentina/Cordoba	most locations (CB, CC, CN, ER, FM, MN, SE, SF)
    +AR	-2447-06525	America/Argentina/Salta	(SA, LP, NQ, RN)
    +AR	-2411-06518	America/Argentina/Jujuy	Jujuy (JY)
    +AR	-2649-06513	America/Argentina/Tucuman	Tucuman (TM)
    +AR	-2828-06547	America/Argentina/Catamarca	Catamarca (CT), Chubut (CH)
    +AR	-2926-06651	America/Argentina/La_Rioja	La Rioja (LR)
    +AR	-3132-06831	America/Argentina/San_Juan	San Juan (SJ)
    +AR	-3253-06849	America/Argentina/Mendoza	Mendoza (MZ)
    +AR	-3319-06621	America/Argentina/San_Luis	San Luis (SL)
    +AR	-5138-06913	America/Argentina/Rio_Gallegos	Santa Cruz (SC)
    +AR	-5448-06818	America/Argentina/Ushuaia	Tierra del Fuego (TF)
    +AS	-1416-17042	Pacific/Pago_Pago
    +AT	+4813+01620	Europe/Vienna
    +AU	-3133+15905	Australia/Lord_Howe	Lord Howe Island
    +AU	-4253+14719	Australia/Hobart	Tasmania - most locations
    +AU	-3956+14352	Australia/Currie	Tasmania - King Island
    +AU	-3749+14458	Australia/Melbourne	Victoria
    +AU	-3352+15113	Australia/Sydney	New South Wales - most locations
    +AU	-3157+14127	Australia/Broken_Hill	New South Wales - Yancowinna
    +AU	-2728+15302	Australia/Brisbane	Queensland - most locations
    +AU	-2016+14900	Australia/Lindeman	Queensland - Holiday Islands
    +AU	-3455+13835	Australia/Adelaide	South Australia
    +AU	-1228+13050	Australia/Darwin	Northern Territory
    +AU	-3157+11551	Australia/Perth	Western Australia - most locations
    +AU	-3143+12852	Australia/Eucla	Western Australia - Eucla area
    +AW	+1230-06958	America/Aruba
    +AX	+6006+01957	Europe/Mariehamn
    +AZ	+4023+04951	Asia/Baku
    +BA	+4352+01825	Europe/Sarajevo
    +BB	+1306-05937	America/Barbados
    +BD	+2343+09025	Asia/Dhaka
    +BE	+5050+00420	Europe/Brussels
    +BF	+1222-00131	Africa/Ouagadougou
    +BG	+4241+02319	Europe/Sofia
    +BH	+2623+05035	Asia/Bahrain
    +BI	-0323+02922	Africa/Bujumbura
    +BJ	+0629+00237	Africa/Porto-Novo
    +BL	+1753-06251	America/St_Barthelemy
    +BM	+3217-06446	Atlantic/Bermuda
    +BN	+0456+11455	Asia/Brunei
    +BO	-1630-06809	America/La_Paz
    +BR	-0351-03225	America/Noronha	Atlantic islands
    +BR	-0127-04829	America/Belem	Amapa, E Para
    +BR	-0343-03830	America/Fortaleza	NE Brazil (MA, PI, CE, RN, PB)
    +BR	-0803-03454	America/Recife	Pernambuco
    +BR	-0712-04812	America/Araguaina	Tocantins
    +BR	-0940-03543	America/Maceio	Alagoas, Sergipe
    +BR	-1259-03831	America/Bahia	Bahia
    +BR	-2332-04637	America/Sao_Paulo	S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)
    +BR	-2027-05437	America/Campo_Grande	Mato Grosso do Sul
    +BR	-1535-05605	America/Cuiaba	Mato Grosso
    +BR	-0226-05452	America/Santarem	W Para
    +BR	-0846-06354	America/Porto_Velho	Rondonia
    +BR	+0249-06040	America/Boa_Vista	Roraima
    +BR	-0308-06001	America/Manaus	E Amazonas
    +BR	-0640-06952	America/Eirunepe	W Amazonas
    +BR	-0958-06748	America/Rio_Branco	Acre
    +BS	+2505-07721	America/Nassau
    +BT	+2728+08939	Asia/Thimphu
    +BW	-2439+02555	Africa/Gaborone
    +BY	+5354+02734	Europe/Minsk
    +BZ	+1730-08812	America/Belize
    +CA	+4734-05243	America/St_Johns	Newfoundland Time, including SE Labrador
    +CA	+4439-06336	America/Halifax	Atlantic Time - Nova Scotia (most places), PEI
    +CA	+4612-05957	America/Glace_Bay	Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
    +CA	+4606-06447	America/Moncton	Atlantic Time - New Brunswick
    +CA	+5320-06025	America/Goose_Bay	Atlantic Time - Labrador - most locations
    +CA	+5125-05707	America/Blanc-Sablon	Atlantic Standard Time - Quebec - Lower North Shore
    +CA	+4531-07334	America/Montreal	Eastern Time - Quebec - most locations
    +CA	+4339-07923	America/Toronto	Eastern Time - Ontario - most locations
    +CA	+4901-08816	America/Nipigon	Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
    +CA	+4823-08915	America/Thunder_Bay	Eastern Time - Thunder Bay, Ontario
    +CA	+6344-06828	America/Iqaluit	Eastern Time - east Nunavut - most locations
    +CA	+6608-06544	America/Pangnirtung	Eastern Time - Pangnirtung, Nunavut
    +CA	+744144-0944945	America/Resolute	Eastern Standard Time - Resolute, Nunavut
    +CA	+484531-0913718	America/Atikokan	Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
    +CA	+624900-0920459	America/Rankin_Inlet	Central Time - central Nunavut
    +CA	+4953-09709	America/Winnipeg	Central Time - Manitoba & west Ontario
    +CA	+4843-09434	America/Rainy_River	Central Time - Rainy River & Fort Frances, Ontario
    +CA	+5024-10439	America/Regina	Central Standard Time - Saskatchewan - most locations
    +CA	+5017-10750	America/Swift_Current	Central Standard Time - Saskatchewan - midwest
    +CA	+5333-11328	America/Edmonton	Mountain Time - Alberta, east British Columbia & west Saskatchewan
    +CA	+690650-1050310	America/Cambridge_Bay	Mountain Time - west Nunavut
    +CA	+6227-11421	America/Yellowknife	Mountain Time - central Northwest Territories
    +CA	+682059-1334300	America/Inuvik	Mountain Time - west Northwest Territories
    +CA	+5946-12014	America/Dawson_Creek	Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
    +CA	+4916-12307	America/Vancouver	Pacific Time - west British Columbia
    +CA	+6043-13503	America/Whitehorse	Pacific Time - south Yukon
    +CA	+6404-13925	America/Dawson	Pacific Time - north Yukon
    +CC	-1210+09655	Indian/Cocos
    +CD	-0418+01518	Africa/Kinshasa	west Dem. Rep. of Congo
    +CD	-1140+02728	Africa/Lubumbashi	east Dem. Rep. of Congo
    +CF	+0422+01835	Africa/Bangui
    +CG	-0416+01517	Africa/Brazzaville
    +CH	+4723+00832	Europe/Zurich
    +CI	+0519-00402	Africa/Abidjan
    +CK	-2114-15946	Pacific/Rarotonga
    +CL	-3327-07040	America/Santiago	most locations
    +CL	-2709-10926	Pacific/Easter	Easter Island & Sala y Gomez
    +CM	+0403+00942	Africa/Douala
    +CN	+3114+12128	Asia/Shanghai	east China - Beijing, Guangdong, Shanghai, etc.
    +CN	+4545+12641	Asia/Harbin	Heilongjiang (except Mohe), Jilin
    +CN	+2934+10635	Asia/Chongqing	central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
    +CN	+4348+08735	Asia/Urumqi	most of Tibet & Xinjiang
    +CN	+3929+07559	Asia/Kashgar	west Tibet & Xinjiang
    +CO	+0436-07405	America/Bogota
    +CR	+0956-08405	America/Costa_Rica
    +CU	+2308-08222	America/Havana
    +CV	+1455-02331	Atlantic/Cape_Verde
    +CX	-1025+10543	Indian/Christmas
    +CY	+3510+03322	Asia/Nicosia
    +CZ	+5005+01426	Europe/Prague
    +DE	+5230+01322	Europe/Berlin
    +DJ	+1136+04309	Africa/Djibouti
    +DK	+5540+01235	Europe/Copenhagen
    +DM	+1518-06124	America/Dominica
    +DO	+1828-06954	America/Santo_Domingo
    +DZ	+3647+00303	Africa/Algiers
    +EC	-0210-07950	America/Guayaquil	mainland
    +EC	-0054-08936	Pacific/Galapagos	Galapagos Islands
    +EE	+5925+02445	Europe/Tallinn
    +EG	+3003+03115	Africa/Cairo
    +EH	+2709-01312	Africa/El_Aaiun
    +ER	+1520+03853	Africa/Asmara
    +ES	+4024-00341	Europe/Madrid	mainland
    +ES	+3553-00519	Africa/Ceuta	Ceuta & Melilla
    +ES	+2806-01524	Atlantic/Canary	Canary Islands
    +ET	+0902+03842	Africa/Addis_Ababa
    +FI	+6010+02458	Europe/Helsinki
    +FJ	-1808+17825	Pacific/Fiji
    +FK	-5142-05751	Atlantic/Stanley
    +FM	+0725+15147	Pacific/Chuuk	Chuuk (Truk) and Yap
    +FM	+0658+15813	Pacific/Pohnpei	Pohnpei (Ponape)
    +FM	+0519+16259	Pacific/Kosrae	Kosrae
    +FO	+6201-00646	Atlantic/Faroe
    +FR	+4852+00220	Europe/Paris
    +GA	+0023+00927	Africa/Libreville
    +GB	+513030-0000731	Europe/London
    +GD	+1203-06145	America/Grenada
    +GE	+4143+04449	Asia/Tbilisi
    +GF	+0456-05220	America/Cayenne
    +GG	+4927-00232	Europe/Guernsey
    +GH	+0533-00013	Africa/Accra
    +GI	+3608-00521	Europe/Gibraltar
    +GL	+6411-05144	America/Godthab	most locations
    +GL	+7646-01840	America/Danmarkshavn	east coast, north of Scoresbysund
    +GL	+7029-02158	America/Scoresbysund	Scoresbysund / Ittoqqortoormiit
    +GL	+7634-06847	America/Thule	Thule / Pituffik
    +GM	+1328-01639	Africa/Banjul
    +GN	+0931-01343	Africa/Conakry
    +GP	+1614-06132	America/Guadeloupe
    +GQ	+0345+00847	Africa/Malabo
    +GR	+3758+02343	Europe/Athens
    +GS	-5416-03632	Atlantic/South_Georgia
    +GT	+1438-09031	America/Guatemala
    +GU	+1328+14445	Pacific/Guam
    +GW	+1151-01535	Africa/Bissau
    +GY	+0648-05810	America/Guyana
    +HK	+2217+11409	Asia/Hong_Kong
    +HN	+1406-08713	America/Tegucigalpa
    +HR	+4548+01558	Europe/Zagreb
    +HT	+1832-07220	America/Port-au-Prince
    +HU	+4730+01905	Europe/Budapest
    +ID	-0610+10648	Asia/Jakarta	Java & Sumatra
    +ID	-0002+10920	Asia/Pontianak	west & central Borneo
    +ID	-0507+11924	Asia/Makassar	east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor
    +ID	-0232+14042	Asia/Jayapura	west New Guinea (Irian Jaya) & Malukus (Moluccas)
    +IE	+5320-00615	Europe/Dublin
    +IL	+3146+03514	Asia/Jerusalem
    +IM	+5409-00428	Europe/Isle_of_Man
    +IN	+2232+08822	Asia/Kolkata
    +IO	-0720+07225	Indian/Chagos
    +IQ	+3321+04425	Asia/Baghdad
    +IR	+3540+05126	Asia/Tehran
    +IS	+6409-02151	Atlantic/Reykjavik
    +IT	+4154+01229	Europe/Rome
    +JE	+4912-00207	Europe/Jersey
    +JM	+1800-07648	America/Jamaica
    +JO	+3157+03556	Asia/Amman
    +JP	+353916+1394441	Asia/Tokyo
    +KE	-0117+03649	Africa/Nairobi
    +KG	+4254+07436	Asia/Bishkek
    +KH	+1133+10455	Asia/Phnom_Penh
    +KI	+0125+17300	Pacific/Tarawa	Gilbert Islands
    +KI	-0308-17105	Pacific/Enderbury	Phoenix Islands
    +KI	+0152-15720	Pacific/Kiritimati	Line Islands
    +KM	-1141+04316	Indian/Comoro
    +KN	+1718-06243	America/St_Kitts
    +KP	+3901+12545	Asia/Pyongyang
    +KR	+3733+12658	Asia/Seoul
    +KW	+2920+04759	Asia/Kuwait
    +KY	+1918-08123	America/Cayman
    +KZ	+4315+07657	Asia/Almaty	most locations
    +KZ	+4448+06528	Asia/Qyzylorda	Qyzylorda (Kyzylorda, Kzyl-Orda)
    +KZ	+5017+05710	Asia/Aqtobe	Aqtobe (Aktobe)
    +KZ	+4431+05016	Asia/Aqtau	Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau)
    +KZ	+5113+05121	Asia/Oral	West Kazakhstan
    +LA	+1758+10236	Asia/Vientiane
    +LB	+3353+03530	Asia/Beirut
    +LC	+1401-06100	America/St_Lucia
    +LI	+4709+00931	Europe/Vaduz
    +LK	+0656+07951	Asia/Colombo
    +LR	+0618-01047	Africa/Monrovia
    +LS	-2928+02730	Africa/Maseru
    +LT	+5441+02519	Europe/Vilnius
    +LU	+4936+00609	Europe/Luxembourg
    +LV	+5657+02406	Europe/Riga
    +LY	+3254+01311	Africa/Tripoli
    +MA	+3339-00735	Africa/Casablanca
    +MC	+4342+00723	Europe/Monaco
    +MD	+4700+02850	Europe/Chisinau
    +ME	+4226+01916	Europe/Podgorica
    +MF	+1804-06305	America/Marigot
    +MG	-1855+04731	Indian/Antananarivo
    +MH	+0709+17112	Pacific/Majuro	most locations
    +MH	+0905+16720	Pacific/Kwajalein	Kwajalein
    +MK	+4159+02126	Europe/Skopje
    +ML	+1239-00800	Africa/Bamako
    +MM	+1647+09610	Asia/Rangoon
    +MN	+4755+10653	Asia/Ulaanbaatar	most locations
    +MN	+4801+09139	Asia/Hovd	Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan
    +MN	+4804+11430	Asia/Choibalsan	Dornod, Sukhbaatar
    +MO	+2214+11335	Asia/Macau
    +MP	+1512+14545	Pacific/Saipan
    +MQ	+1436-06105	America/Martinique
    +MR	+1806-01557	Africa/Nouakchott
    +MS	+1643-06213	America/Montserrat
    +MT	+3554+01431	Europe/Malta
    +MU	-2010+05730	Indian/Mauritius
    +MV	+0410+07330	Indian/Maldives
    +MW	-1547+03500	Africa/Blantyre
    +MX	+1924-09909	America/Mexico_City	Central Time - most locations
    +MX	+2105-08646	America/Cancun	Central Time - Quintana Roo
    +MX	+2058-08937	America/Merida	Central Time - Campeche, Yucatan
    +MX	+2540-10019	America/Monterrey	Mexican Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas away from US border
    +MX	+2550-09730	America/Matamoros	US Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas near US border
    +MX	+2313-10625	America/Mazatlan	Mountain Time - S Baja, Nayarit, Sinaloa
    +MX	+2838-10605	America/Chihuahua	Mexican Mountain Time - Chihuahua away from US border
    +MX	+2934-10425	America/Ojinaga	US Mountain Time - Chihuahua near US border
    +MX	+2904-11058	America/Hermosillo	Mountain Standard Time - Sonora
    +MX	+3232-11701	America/Tijuana	US Pacific Time - Baja California near US border
    +MX	+3018-11452	America/Santa_Isabel	Mexican Pacific Time - Baja California away from US border
    +MX	+2048-10515	America/Bahia_Banderas	Mexican Central Time - Bahia de Banderas
    +MY	+0310+10142	Asia/Kuala_Lumpur	peninsular Malaysia
    +MY	+0133+11020	Asia/Kuching	Sabah & Sarawak
    +MZ	-2558+03235	Africa/Maputo
    +NA	-2234+01706	Africa/Windhoek
    +NC	-2216+16627	Pacific/Noumea
    +NE	+1331+00207	Africa/Niamey
    +NF	-2903+16758	Pacific/Norfolk
    +NG	+0627+00324	Africa/Lagos
    +NI	+1209-08617	America/Managua
    +NL	+5222+00454	Europe/Amsterdam
    +NO	+5955+01045	Europe/Oslo
    +NP	+2743+08519	Asia/Kathmandu
    +NR	-0031+16655	Pacific/Nauru
    +NU	-1901-16955	Pacific/Niue
    +NZ	-3652+17446	Pacific/Auckland	most locations
    +NZ	-4357-17633	Pacific/Chatham	Chatham Islands
    +OM	+2336+05835	Asia/Muscat
    +PA	+0858-07932	America/Panama
    +PE	-1203-07703	America/Lima
    +PF	-1732-14934	Pacific/Tahiti	Society Islands
    +PF	-0900-13930	Pacific/Marquesas	Marquesas Islands
    +PF	-2308-13457	Pacific/Gambier	Gambier Islands
    +PG	-0930+14710	Pacific/Port_Moresby
    +PH	+1435+12100	Asia/Manila
    +PK	+2452+06703	Asia/Karachi
    +PL	+5215+02100	Europe/Warsaw
    +PM	+4703-05620	America/Miquelon
    +PN	-2504-13005	Pacific/Pitcairn
    +PR	+182806-0660622	America/Puerto_Rico
    +PS	+3130+03428	Asia/Gaza
    +PT	+3843-00908	Europe/Lisbon	mainland
    +PT	+3238-01654	Atlantic/Madeira	Madeira Islands
    +PT	+3744-02540	Atlantic/Azores	Azores
    +PW	+0720+13429	Pacific/Palau
    +PY	-2516-05740	America/Asuncion
    +QA	+2517+05132	Asia/Qatar
    +RE	-2052+05528	Indian/Reunion
    +RO	+4426+02606	Europe/Bucharest
    +RS	+4450+02030	Europe/Belgrade
    +RU	+5443+02030	Europe/Kaliningrad	Moscow-01 - Kaliningrad
    +RU	+5545+03735	Europe/Moscow	Moscow+00 - west Russia
    +RU	+4844+04425	Europe/Volgograd	Moscow+00 - Caspian Sea
    +RU	+5312+05009	Europe/Samara	Moscow - Samara, Udmurtia
    +RU	+5651+06036	Asia/Yekaterinburg	Moscow+02 - Urals
    +RU	+5500+07324	Asia/Omsk	Moscow+03 - west Siberia
    +RU	+5502+08255	Asia/Novosibirsk	Moscow+03 - Novosibirsk
    +RU	+5345+08707	Asia/Novokuznetsk	Moscow+03 - Novokuznetsk
    +RU	+5601+09250	Asia/Krasnoyarsk	Moscow+04 - Yenisei River
    +RU	+5216+10420	Asia/Irkutsk	Moscow+05 - Lake Baikal
    +RU	+6200+12940	Asia/Yakutsk	Moscow+06 - Lena River
    +RU	+4310+13156	Asia/Vladivostok	Moscow+07 - Amur River
    +RU	+4658+14242	Asia/Sakhalin	Moscow+07 - Sakhalin Island
    +RU	+5934+15048	Asia/Magadan	Moscow+08 - Magadan
    +RU	+5301+15839	Asia/Kamchatka	Moscow+08 - Kamchatka
    +RU	+6445+17729	Asia/Anadyr	Moscow+08 - Bering Sea
    +RW	-0157+03004	Africa/Kigali
    +SA	+2438+04643	Asia/Riyadh
    +SB	-0932+16012	Pacific/Guadalcanal
    +SC	-0440+05528	Indian/Mahe
    +SD	+1536+03232	Africa/Khartoum
    +SE	+5920+01803	Europe/Stockholm
    +SG	+0117+10351	Asia/Singapore
    +SH	-1555-00542	Atlantic/St_Helena
    +SI	+4603+01431	Europe/Ljubljana
    +SJ	+7800+01600	Arctic/Longyearbyen
    +SK	+4809+01707	Europe/Bratislava
    +SL	+0830-01315	Africa/Freetown
    +SM	+4355+01228	Europe/San_Marino
    +SN	+1440-01726	Africa/Dakar
    +SO	+0204+04522	Africa/Mogadishu
    +SR	+0550-05510	America/Paramaribo
    +ST	+0020+00644	Africa/Sao_Tome
    +SV	+1342-08912	America/El_Salvador
    +SY	+3330+03618	Asia/Damascus
    +SZ	-2618+03106	Africa/Mbabane
    +TC	+2128-07108	America/Grand_Turk
    +TD	+1207+01503	Africa/Ndjamena
    +TF	-492110+0701303	Indian/Kerguelen
    +TG	+0608+00113	Africa/Lome
    +TH	+1345+10031	Asia/Bangkok
    +TJ	+3835+06848	Asia/Dushanbe
    +TK	-0922-17114	Pacific/Fakaofo
    +TL	-0833+12535	Asia/Dili
    +TM	+3757+05823	Asia/Ashgabat
    +TN	+3648+01011	Africa/Tunis
    +TO	-2110-17510	Pacific/Tongatapu
    +TR	+4101+02858	Europe/Istanbul
    +TT	+1039-06131	America/Port_of_Spain
    +TV	-0831+17913	Pacific/Funafuti
    +TW	+2503+12130	Asia/Taipei
    +TZ	-0648+03917	Africa/Dar_es_Salaam
    +UA	+5026+03031	Europe/Kiev	most locations
    +UA	+4837+02218	Europe/Uzhgorod	Ruthenia
    +UA	+4750+03510	Europe/Zaporozhye	Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk
    +UA	+4457+03406	Europe/Simferopol	central Crimea
    +UG	+0019+03225	Africa/Kampala
    +UM	+1645-16931	Pacific/Johnston	Johnston Atoll
    +UM	+2813-17722	Pacific/Midway	Midway Islands
    +UM	+1917+16637	Pacific/Wake	Wake Island
    +US	+404251-0740023	America/New_York	Eastern Time
    +US	+421953-0830245	America/Detroit	Eastern Time - Michigan - most locations
    +US	+381515-0854534	America/Kentucky/Louisville	Eastern Time - Kentucky - Louisville area
    +US	+364947-0845057	America/Kentucky/Monticello	Eastern Time - Kentucky - Wayne County
    +US	+394606-0860929	America/Indiana/Indianapolis	Eastern Time - Indiana - most locations
    +US	+384038-0873143	America/Indiana/Vincennes	Eastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties
    +US	+410305-0863611	America/Indiana/Winamac	Eastern Time - Indiana - Pulaski County
    +US	+382232-0862041	America/Indiana/Marengo	Eastern Time - Indiana - Crawford County
    +US	+382931-0871643	America/Indiana/Petersburg	Eastern Time - Indiana - Pike County
    +US	+384452-0850402	America/Indiana/Vevay	Eastern Time - Indiana - Switzerland County
    +US	+415100-0873900	America/Chicago	Central Time
    +US	+375711-0864541	America/Indiana/Tell_City	Central Time - Indiana - Perry County
    +US	+411745-0863730	America/Indiana/Knox	Central Time - Indiana - Starke County
    +US	+450628-0873651	America/Menominee	Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
    +US	+470659-1011757	America/North_Dakota/Center	Central Time - North Dakota - Oliver County
    +US	+465042-1012439	America/North_Dakota/New_Salem	Central Time - North Dakota - Morton County (except Mandan area)
    +US	+471551-1014640	America/North_Dakota/Beulah	Central Time - North Dakota - Mercer County
    +US	+394421-1045903	America/Denver	Mountain Time
    +US	+433649-1161209	America/Boise	Mountain Time - south Idaho & east Oregon
    +US	+364708-1084111	America/Shiprock	Mountain Time - Navajo
    +US	+332654-1120424	America/Phoenix	Mountain Standard Time - Arizona
    +US	+340308-1181434	America/Los_Angeles	Pacific Time
    +US	+611305-1495401	America/Anchorage	Alaska Time
    +US	+581807-1342511	America/Juneau	Alaska Time - Alaska panhandle
    +US	+571035-1351807	America/Sitka	Alaska Time - southeast Alaska panhandle
    +US	+593249-1394338	America/Yakutat	Alaska Time - Alaska panhandle neck
    +US	+643004-1652423	America/Nome	Alaska Time - west Alaska
    +US	+515248-1763929	America/Adak	Aleutian Islands
    +US	+550737-1313435	America/Metlakatla	Metlakatla Time - Annette Island
    +US	+211825-1575130	Pacific/Honolulu	Hawaii
    +UY	-3453-05611	America/Montevideo
    +UZ	+3940+06648	Asia/Samarkand	west Uzbekistan
    +UZ	+4120+06918	Asia/Tashkent	east Uzbekistan
    +VA	+415408+0122711	Europe/Vatican
    +VC	+1309-06114	America/St_Vincent
    +VE	+1030-06656	America/Caracas
    +VG	+1827-06437	America/Tortola
    +VI	+1821-06456	America/St_Thomas
    +VN	+1045+10640	Asia/Ho_Chi_Minh
    +VU	-1740+16825	Pacific/Efate
    +WF	-1318-17610	Pacific/Wallis
    +WS	-1350-17144	Pacific/Apia
    +YE	+1245+04512	Asia/Aden
    +YT	-1247+04514	Indian/Mayotte
    +ZA	-2615+02800	Africa/Johannesburg
    +ZM	-1525+02817	Africa/Lusaka
    +ZW	-1750+03103	Africa/Harare
    diff --git a/examples/visitors.html b/examples/visitors.html
    index 8a9d4d7..51ad059 100644
    --- a/examples/visitors.html
    +++ b/examples/visitors.html
    @@ -7,6 +7,7 @@
         
         
         
    +    
         
      
         
    diff --git a/jquery.flot.js b/jquery.flot.js
    index 2bbf4fc..0817fd8 100644
    --- a/jquery.flot.js
    +++ b/jquery.flot.js
    @@ -57,6 +57,7 @@
                         show: null, // null = auto-detect, true = always, false = never
                         position: "bottom", // or "top"
                         mode: null, // null or "time"
    +                    timezone: null, // "browser" for local to the client or timezone for timezone-js
                         font: null, // null (derived from CSS in placeholder) or object like { size: 11, style: "italic", weight: "bold", family: "sans-serif", variant: "small-caps" }
                         color: null, // base color, labels, ticks
                         tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)"
    @@ -1164,177 +1165,20 @@
                     // some data points that seemed reasonable
                     noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? canvasWidth : canvasHeight);
     
    -            var delta = (axis.max - axis.min) / noTicks,
    -                size, generator, unit, formatter, i, magn, norm;
    +            axis.delta = (axis.max - axis.min) / noTicks;
     
    -            if (opts.mode == "time") {
    -                // pretty handling of time
    -                
    -                // map of app. size of time units in milliseconds
    -                var timeUnitSize = {
    -                    "second": 1000,
    -                    "minute": 60 * 1000,
    -                    "hour": 60 * 60 * 1000,
    -                    "day": 24 * 60 * 60 * 1000,
    -                    "month": 30 * 24 * 60 * 60 * 1000,
    -                    "year": 365.2425 * 24 * 60 * 60 * 1000
    -                };
    -
    -
    -                // the allowed tick sizes, after 1 year we use
    -                // an integer algorithm
    -                var spec = [
    -                    [1, "second"], [2, "second"], [5, "second"], [10, "second"],
    -                    [30, "second"], 
    -                    [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],
    -                    [30, "minute"], 
    -                    [1, "hour"], [2, "hour"], [4, "hour"],
    -                    [8, "hour"], [12, "hour"],
    -                    [1, "day"], [2, "day"], [3, "day"],
    -                    [0.25, "month"], [0.5, "month"], [1, "month"],
    -                    [2, "month"], [3, "month"], [6, "month"],
    -                    [1, "year"]
    -                ];
    -
    -                var minSize = 0;
    -                if (opts.minTickSize != null) {
    -                    if (typeof opts.tickSize == "number")
    -                        minSize = opts.tickSize;
    -                    else
    -                        minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];
    -                }
    -
    -                for (var i = 0; i < spec.length - 1; ++i)
    -                    if (delta < (spec[i][0] * timeUnitSize[spec[i][1]]
    -                                 + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2
    -                       && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize)
    -                        break;
    -                size = spec[i][0];
    -                unit = spec[i][1];
    -                
    -                // special-case the possibility of several years
    -                if (unit == "year") {
    -                    magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10));
    -                    norm = (delta / timeUnitSize.year) / magn;
    -                    if (norm < 1.5)
    -                        size = 1;
    -                    else if (norm < 3)
    -                        size = 2;
    -                    else if (norm < 7.5)
    -                        size = 5;
    -                    else
    -                        size = 10;
    -
    -                    size *= magn;
    -                }
    -
    -                axis.tickSize = opts.tickSize || [size, unit];
    -                
    -                generator = function(axis) {
    -                    var ticks = [],
    -                        tickSize = axis.tickSize[0], unit = axis.tickSize[1],
    -                        d = new Date(axis.min);
    -                    
    -                    var step = tickSize * timeUnitSize[unit];
    -
    -                    if (unit == "second")
    -                        d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize));
    -                    if (unit == "minute")
    -                        d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize));
    -                    if (unit == "hour")
    -                        d.setUTCHours(floorInBase(d.getUTCHours(), tickSize));
    -                    if (unit == "month")
    -                        d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize));
    -                    if (unit == "year")
    -                        d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize));
    -                    
    -                    // reset smaller components
    -                    d.setUTCMilliseconds(0);
    -                    if (step >= timeUnitSize.minute)
    -                        d.setUTCSeconds(0);
    -                    if (step >= timeUnitSize.hour)
    -                        d.setUTCMinutes(0);
    -                    if (step >= timeUnitSize.day)
    -                        d.setUTCHours(0);
    -                    if (step >= timeUnitSize.day * 4)
    -                        d.setUTCDate(1);
    -                    if (step >= timeUnitSize.year)
    -                        d.setUTCMonth(0);
    -
    -
    -                    var carry = 0, v = Number.NaN, prev;
    -                    do {
    -                        prev = v;
    -                        v = d.getTime();
    -                        ticks.push(v);
    -                        if (unit == "month") {
    -                            if (tickSize < 1) {
    -                                // a bit complicated - we'll divide the month
    -                                // up but we need to take care of fractions
    -                                // so we don't end up in the middle of a day
    -                                d.setUTCDate(1);
    -                                var start = d.getTime();
    -                                d.setUTCMonth(d.getUTCMonth() + 1);
    -                                var end = d.getTime();
    -                                d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);
    -                                carry = d.getUTCHours();
    -                                d.setUTCHours(0);
    -                            }
    -                            else
    -                                d.setUTCMonth(d.getUTCMonth() + tickSize);
    -                        }
    -                        else if (unit == "year") {
    -                            d.setUTCFullYear(d.getUTCFullYear() + tickSize);
    -                        }
    -                        else
    -                            d.setTime(v + step);
    -                    } while (v < axis.max && v != prev);
    -
    -                    return ticks;
    -                };
    -
    -                formatter = function (v, axis) {
    -                    var d = new Date(v);
    -
    -                    // first check global format
    -                    if (opts.timeformat != null)
    -                        return $.plot.formatDate(d, opts.timeformat, opts.monthNames);
    -                    
    -                    var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];
    -                    var span = axis.max - axis.min;
    -                    var suffix = (opts.twelveHourClock) ? " %p" : "";
    -                    
    -                    if (t < timeUnitSize.minute)
    -                        fmt = "%h:%M:%S" + suffix;
    -                    else if (t < timeUnitSize.day) {
    -                        if (span < 2 * timeUnitSize.day)
    -                            fmt = "%h:%M" + suffix;
    -                        else
    -                            fmt = "%b %d %h:%M" + suffix;
    -                    }
    -                    else if (t < timeUnitSize.month)
    -                        fmt = "%b %d";
    -                    else if (t < timeUnitSize.year) {
    -                        if (span < timeUnitSize.year)
    -                            fmt = "%b";
    -                        else
    -                            fmt = "%b %y";
    -                    }
    -                    else
    -                        fmt = "%y";
    -                    
    -                    return $.plot.formatDate(d, fmt, opts.monthNames);
    -                };
    -            }
    -            else {
    +            // special modes are handled by plug-ins, e.g. "time". The default
    +            // is base-10 numbers.
    +            if (!opts.mode) {
                     // pretty rounding of base-10 numbers
                     var maxDec = opts.tickDecimals;
    -                var dec = -Math.floor(Math.log(delta) / Math.LN10);
    +                var dec = -Math.floor(Math.log(axis.delta) / Math.LN10);
                     if (maxDec != null && dec > maxDec)
                         dec = maxDec;
     
    -                magn = Math.pow(10, -dec);
    -                norm = delta / magn; // norm is between 1.0 and 10.0
    +                var magn = Math.pow(10, -dec);
    +                var norm = axis.delta / magn; // norm is between 1.0 and 10.0
    +                var size;
                     
                     if (norm < 1.5)
                         size = 1;
    @@ -1359,7 +1203,7 @@
                     axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);
                     axis.tickSize = opts.tickSize || size;
     
    -                generator = function (axis) {
    +                axis.tickGenerator = function (axis) {
                         var ticks = [];
     
                         // spew out all possible ticks
    @@ -1374,16 +1218,19 @@
                         return ticks;
                     };
     
    -                formatter = function (v, axis) {
    +                axis.tickFormatter = function (v, axis) {
                         return v.toFixed(axis.tickDecimals);
                     };
                 }
     
    +            if ($.isFunction(opts.tickFormatter))
    +                axis.tickFormatter = function (v, axis) { return "" + opts.tickFormatter(v, axis); };
    +
                 if (opts.alignTicksWithAxis != null) {
                     var otherAxis = (axis.direction == "x" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];
                     if (otherAxis && otherAxis.used && otherAxis != axis) {
                         // consider snapping min/max to outermost nice ticks
    -                    var niceTicks = generator(axis);
    +                    var niceTicks = axis.tickGenerator(axis);
                         if (niceTicks.length > 0) {
                             if (opts.min == null)
                                 axis.min = Math.min(axis.min, niceTicks[0]);
    @@ -1391,7 +1238,7 @@
                                 axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);
                         }
                         
    -                    generator = function (axis) {
    +                    axis.tickGenerator = function (axis) {
                             // copy ticks, scaled to this axis
                             var ticks = [], v, i;
                             for (i = 0; i < otherAxis.ticks.length; ++i) {
    @@ -1405,8 +1252,8 @@
                         // we might need an extra decimal since forced
                         // ticks don't necessarily fit naturally
                         if (!axis.mode && opts.tickDecimals == null) {
    -                        var extraDec = Math.max(0, -Math.floor(Math.log(delta) / Math.LN10) + 1),
    -                            ts = generator(axis);
    +                        var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1),
    +                            ts = axis.tickGenerator(axis);
     
                             // only proceed if the tick interval rounded
                             // with an extra decimal doesn't give us a
    @@ -1416,12 +1263,6 @@
                         }
                     }
                 }
    -
    -            axis.tickGenerator = generator;
    -            if ($.isFunction(opts.tickFormatter))
    -                axis.tickFormatter = function (v, axis) { return "" + opts.tickFormatter(v, axis); };
    -            else
    -                axis.tickFormatter = formatter;
             }
             
             function setTicks(axis) {
    @@ -2633,62 +2474,6 @@
         
         $.plot.plugins = [];
     
    -    // returns a string with the date d formatted according to fmt
    -    $.plot.formatDate = function(d, fmt, monthNames) {
    -        var leftPad = function(n) {
    -            n = "" + n;
    -            return n.length == 1 ? "0" + n : n;
    -        };
    -        
    -        var r = [];
    -        var escape = false, padNext = false;
    -        var hours = d.getUTCHours();
    -        var isAM = hours < 12;
    -        if (monthNames == null)
    -            monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
    -
    -        if (fmt.search(/%p|%P/) != -1) {
    -            if (hours > 12) {
    -                hours = hours - 12;
    -            } else if (hours == 0) {
    -                hours = 12;
    -            }
    -        }
    -        for (var i = 0; i < fmt.length; ++i) {
    -            var c = fmt.charAt(i);
    -            
    -            if (escape) {
    -                switch (c) {
    -                case 'h': c = "" + hours; break;
    -                case 'H': c = leftPad(hours); break;
    -                case 'M': c = leftPad(d.getUTCMinutes()); break;
    -                case 'S': c = leftPad(d.getUTCSeconds()); break;
    -                case 'd': c = "" + d.getUTCDate(); break;
    -                case 'm': c = "" + (d.getUTCMonth() + 1); break;
    -                case 'y': c = "" + d.getUTCFullYear(); break;
    -                case 'b': c = "" + monthNames[d.getUTCMonth()]; break;
    -                case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break;
    -                case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break;
    -                case '0': c = ""; padNext = true; break;
    -                }
    -                if (c && padNext) {
    -                    c = leftPad(c);
    -                    padNext = false;
    -                }
    -                r.push(c);
    -                if (!padNext)
    -                    escape = false;
    -            }
    -            else {
    -                if (c == "%")
    -                    escape = true;
    -                else
    -                    r.push(c);
    -            }
    -        }
    -        return r.join("");
    -    };
    -    
         // round to nearby lower multiple of base
         function floorInBase(n, base) {
             return base * Math.floor(n / base);
    diff --git a/jquery.flot.time.js b/jquery.flot.time.js
    new file mode 100644
    index 0000000..e27f274
    --- /dev/null
    +++ b/jquery.flot.time.js
    @@ -0,0 +1,286 @@
    +/*
    +Pretty handling of time axes.
    +
    +Set axis.mode to "time" to enable. See the section "Time series data" in API.txt
    +for details.
    +*/
    +(function ($) {
    +    var options = {};
    +
    +    // round to nearby lower multiple of base
    +    function floorInBase(n, base) {
    +        return base * Math.floor(n / base);
    +    }
    +
    +    // returns a string with the date d formatted according to fmt
    +    function formatDate(d, fmt, monthNames) {
    +        var leftPad = function(n) {
    +            n = "" + n;
    +            return n.length == 1 ? "0" + n : n;
    +        };
    +        
    +        var r = [];
    +        var escape = false, padNext = false;
    +        var hours = d.getHours();
    +        var isAM = hours < 12;
    +        if (monthNames == null)
    +            monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
    +
    +        if (fmt.search(/%p|%P/) != -1) {
    +            if (hours > 12) {
    +                hours = hours - 12;
    +            } else if (hours == 0) {
    +                hours = 12;
    +            }
    +        }
    +        for (var i = 0; i < fmt.length; ++i) {
    +            var c = fmt.charAt(i);
    +            
    +            if (escape) {
    +                switch (c) {
    +                case 'h': c = "" + hours; break;
    +                case 'H': c = leftPad(hours); break;
    +                case 'M': c = leftPad(d.getMinutes()); break;
    +                case 'S': c = leftPad(d.getSeconds()); break;
    +                case 'd': c = "" + d.getDate(); break;
    +                case 'm': c = "" + (d.getMonth() + 1); break;
    +                case 'y': c = "" + d.getFullYear(); break;
    +                case 'b': c = "" + monthNames[d.getMonth()]; break;
    +                case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break;
    +                case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break;
    +                case '0': c = ""; padNext = true; break;
    +                }
    +                if (c && padNext) {
    +                    c = leftPad(c);
    +                    padNext = false;
    +                }
    +                r.push(c);
    +                if (!padNext)
    +                    escape = false;
    +            }
    +            else {
    +                if (c == "%")
    +                    escape = true;
    +                else
    +                    r.push(c);
    +            }
    +        }
    +        return r.join("");
    +    }
    +
    +    // To have a consistent view of time-based data independent of which time
    +    // zone the client happens to be in we need a date-like object independent
    +    // of time zones.  This is done through a wrapper that only calls the UTC
    +    // versions of the accessor methods.
    +    function makeUtcWrapper(d) {
    +        function addProxyMethod(sourceObj, sourceMethod, targetObj,
    +                                targetMethod) {
    +            sourceObj[sourceMethod] = function() {
    +                return targetObj[targetMethod].apply(targetObj, arguments);
    +            }
    +        };
    +        var utc = {
    +            date: d
    +        };
    +        addProxyMethod(utc, "getTime", d, "getTime");
    +        addProxyMethod(utc, "setTime", d, "setTime");
    +        var props = [ "Date", "Day", "FullYear", "Hours", "Milliseconds", "Minutes", "Month", "Seconds" ];
    +        for (var p = 0; p < props.length; p++) {
    +            addProxyMethod(utc, "get" + props[p], d, "getUTC" + props[p]);
    +            addProxyMethod(utc, "set" + props[p], d, "setUTC" + props[p]);
    +        }
    +        return utc;
    +    };
    +
    +    // select time zone strategy.  This returns a date-like object tied to the
    +    // desired timezone
    +    function dateGenerator(ts, opts) {
    +        if (opts.timezone == "browser") {
    +            return new Date(ts);
    +        } else if (!opts.timezone || opts.timezone == "utc") {
    +            return makeUtcWrapper(new Date(ts));
    +        } else if (typeof timezoneJS != "undefined" && typeof timezoneJS.Date != "undefined") {
    +            var d = new timezoneJS.Date();
    +            // timezone-js is fickle, so be sure to set the time zone before
    +            // setting the time.
    +            d.setTimezone(opts.timezone);
    +            d.setTime(ts);
    +            return d;
    +        } else {
    +            return makeUtcWrapper(new Date(ts));
    +        }
    +    }
    +    
    +    // map of app. size of time units in milliseconds
    +    var timeUnitSize = {
    +        "second": 1000,
    +        "minute": 60 * 1000,
    +        "hour": 60 * 60 * 1000,
    +        "day": 24 * 60 * 60 * 1000,
    +        "month": 30 * 24 * 60 * 60 * 1000,
    +        "year": 365.2425 * 24 * 60 * 60 * 1000
    +    };
    +
    +    // the allowed tick sizes, after 1 year we use
    +    // an integer algorithm
    +    var spec = [
    +        [1, "second"], [2, "second"], [5, "second"], [10, "second"],
    +        [30, "second"], 
    +        [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],
    +        [30, "minute"], 
    +        [1, "hour"], [2, "hour"], [4, "hour"],
    +        [8, "hour"], [12, "hour"],
    +        [1, "day"], [2, "day"], [3, "day"],
    +        [0.25, "month"], [0.5, "month"], [1, "month"],
    +        [2, "month"], [3, "month"], [6, "month"],
    +        [1, "year"]
    +    ];
    +
    +    function init(plot) {
    +        plot.hooks.processDatapoints.push(function (plot, series, datapoints) {
    +            $.each(plot.getAxes(), function(axisName, axis) {
    +                var opts = axis.options;
    +                if (opts.mode == "time") {
    +                    axis.tickGenerator = function(axis) {
    +                        var ticks = [],
    +                            d = dateGenerator(axis.min, opts),
    +                            minSize = 0;
    +
    +                        if (opts.minTickSize != null) {
    +                            if (typeof opts.tickSize == "number")
    +                                minSize = opts.tickSize;
    +                            else
    +                                minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];
    +                        }
    +
    +                        for (var i = 0; i < spec.length - 1; ++i)
    +                            if (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]]
    +                                              + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2
    +                                && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize)
    +                                break;
    +                        var size = spec[i][0];
    +                        var unit = spec[i][1];
    +                        
    +                        // special-case the possibility of several years
    +                        if (unit == "year") {
    +                            var magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10));
    +                            var norm = (axis.delta / timeUnitSize.year) / magn;
    +                            if (norm < 1.5)
    +                                size = 1;
    +                            else if (norm < 3)
    +                                size = 2;
    +                            else if (norm < 7.5)
    +                                size = 5;
    +                            else
    +                                size = 10;
    +                            
    +                            size *= magn;
    +                        }
    +
    +                        axis.tickSize = opts.tickSize || [size, unit];
    +                        var tickSize = axis.tickSize[0];
    +                        unit = axis.tickSize[1];
    +                        
    +                        var step = tickSize * timeUnitSize[unit];
    +
    +                        if (unit == "second")
    +                            d.setSeconds(floorInBase(d.getSeconds(), tickSize));
    +                        if (unit == "minute")
    +                            d.setMinutes(floorInBase(d.getMinutes(), tickSize));
    +                        if (unit == "hour")
    +                            d.setHours(floorInBase(d.getHours(), tickSize));
    +                        if (unit == "month")
    +                            d.setMonth(floorInBase(d.getMonth(), tickSize));
    +                        if (unit == "year")
    +                            d.setFullYear(floorInBase(d.getFullYear(), tickSize));
    +                        
    +                        // reset smaller components
    +                        d.setMilliseconds(0);
    +                        if (step >= timeUnitSize.minute)
    +                            d.setSeconds(0);
    +                        if (step >= timeUnitSize.hour)
    +                            d.setMinutes(0);
    +                        if (step >= timeUnitSize.day)
    +                            d.setHours(0);
    +                        if (step >= timeUnitSize.day * 4)
    +                            d.setDate(1);
    +                        if (step >= timeUnitSize.year)
    +                            d.setMonth(0);
    +
    +
    +                        var carry = 0, v = Number.NaN, prev;
    +                        do {
    +                            prev = v;
    +                            v = d.getTime();
    +                            ticks.push(v);
    +                            if (unit == "month") {
    +                                if (tickSize < 1) {
    +                                    // a bit complicated - we'll divide the month
    +                                    // up but we need to take care of fractions
    +                                    // so we don't end up in the middle of a day
    +                                    d.setDate(1);
    +                                    var start = d.getTime();
    +                                    d.setMonth(d.getMonth() + 1);
    +                                    var end = d.getTime();
    +                                    d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);
    +                                    carry = d.getHours();
    +                                    d.setHours(0);
    +                                }
    +                                else
    +                                    d.setMonth(d.getMonth() + tickSize);
    +                            }
    +                            else if (unit == "year") {
    +                                d.setFullYear(d.getFullYear() + tickSize);
    +                            }
    +                            else
    +                                d.setTime(v + step);
    +                        } while (v < axis.max && v != prev);
    +
    +                        return ticks;
    +                    };
    +
    +                    axis.tickFormatter = function (v, axis) {
    +                        var d = dateGenerator(v, axis.options);
    +
    +                        // first check global format
    +                        if (opts.timeformat != null)
    +                            return formatDate(d, opts.timeformat, opts.monthNames);
    +                        
    +                        var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];
    +                        var span = axis.max - axis.min;
    +                        var suffix = (opts.twelveHourClock) ? " %p" : "";
    +                        
    +                        if (t < timeUnitSize.minute)
    +                            fmt = "%h:%M:%S" + suffix;
    +                        else if (t < timeUnitSize.day) {
    +                            if (span < 2 * timeUnitSize.day)
    +                                fmt = "%h:%M" + suffix;
    +                            else
    +                                fmt = "%b %d %h:%M" + suffix;
    +                        }
    +                        else if (t < timeUnitSize.month)
    +                            fmt = "%b %d";
    +                        else if (t < timeUnitSize.year) {
    +                            if (span < timeUnitSize.year)
    +                                fmt = "%b";
    +                            else
    +                                fmt = "%b %y";
    +                        }
    +                        else
    +                            fmt = "%y";
    +                        
    +                        var rt = formatDate(d, fmt, opts.monthNames);
    +                        return rt;
    +                    };
    +                }
    +            });
    +        });
    +    }
    +
    +    $.plot.plugins.push({
    +        init: init,
    +        options: options,
    +        name: 'time',
    +        version: '1.0'
    +    });
    +})(jQuery);
    
    From 24632ba185ab5e2816ea9f63da1631b5d2da21be Mon Sep 17 00:00:00 2001
    From: =?UTF-8?q?Mark=20C=C3=B4t=C3=A9?= 
    Date: Wed, 6 Jun 2012 00:48:00 -0400
    Subject: [PATCH 2/2] Updated NEWS.txt with time-series changes.
    
    ---
     NEWS.txt | 17 +++++++++++++++++
     1 file changed, 17 insertions(+)
    
    diff --git a/NEWS.txt b/NEWS.txt
    index 78ff101..e6c4b2a 100644
    --- a/NEWS.txt
    +++ b/NEWS.txt
    @@ -3,6 +3,18 @@ Flot x.x
     
     API changes:
     
    +Support for time series has been moved into a plugin,
    +jquery.flot.time.js. This results in less code if time series are not
    +used. The functionality remains the same (plus timezone support, as
    +described below); however, the plugin must be included if axis.mode
    +is set to "time".
    +
    +When the axis mode is "time", the axis option "timezone" can be set to
    +null, "browser", or a particular timezone (e.g. "America/New_York") to
    +control how the dates are displayed. If null, the dates are displayed
    +as UTC. If "browser", the dates are displayed in the time zone of the
    +user's browser.
    +
     Axis labels are now drawn with canvas text with some parsing to
     support newlines. This solves various issues but also means that they
     no longer support HTML markup, can be accessed as DOM elements or
    @@ -17,6 +29,11 @@ and "flot-overlay" to prevent accidental clashes (issue 540).
     
     Changes:
     
    +- Support for time series moved to plugin (patch by Mark Cote).
    +
    +- Display time series in different time zones (patch by Knut Forkalsrud,
    +  issue 141).
    +
     - Canvas text support for labels (sponsored by YCharts.com).
     
     - Support for setting the interval between redraws of the overlay