[ Index ]

PHP Cross Reference of Limb3

title

Body

[close]

/datetime/src/ -> lmbDateTimeZone.class.php (source)

   1  <?php
   2  /*
   3   * Limb PHP Framework
   4   *
   5   * @link http://limb-project.com 
   6   * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
   7   * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
   8   */
   9  //inspired by PEAR::lmbDate package

  10  
  11  /**
  12   * time_zone representation class, along with time zone information data.
  13   *
  14   * time_zone representation class, along with time zone information data.
  15   * The default timezone is set from the first valid timezone id found
  16   * in one of the following places, in this order:
  17   * 1) global $_DATE_TIMEZONE_DEFAULT
  18   * 2) system environment variable PHP_TZ
  19   * 3) system environment variable TZ
  20   * 4) the result of date('T')
  21   * If no valid timezone id is found, the default timezone is set to 'UTC'.
  22   * You may also manually set the default timezone by passing a valid id to
  23   * date_time_zone::set_default().
  24   *
  25   * This class includes time zone data (from zoneinfo) in the form of a global array, $_DATE_TIMEZONE_DATA.
  26   * @package datetime
  27   * @version $Id: lmbDateTimeZone.class.php 5945 2007-06-06 08:31:43Z pachanga $
  28   */
  29  class lmbDateTimeZone
  30  {
  31    var $id;
  32    var $longname; //Long Name of this time zone (ie Central Standard Time)

  33    var $shortname; //Short Name of this time zone (ie CST)

  34    var $hasdst; //true if this time zone observes daylight savings time

  35    var $dstlongname; //DST Long Name of this time zone

  36    var $dstshortname; //DST Short Name of this timezone

  37    var $offset; //offset, in milliseconds, of this timezone

  38  
  39    var $default; //System Default Time Zone

  40  
  41    function lmbDateTimeZone($id)
  42    {
  43      global $_DATE_TIMEZONE_DATA;
  44  
  45      if (lmbDateTimeZone::isValidId($id))
  46      {
  47        $this->id = $id;
  48        $this->longname = $_DATE_TIMEZONE_DATA[$id]['longname'];
  49        $this->shortname = $_DATE_TIMEZONE_DATA[$id]['shortname'];
  50        $this->offset = $_DATE_TIMEZONE_DATA[$id]['offset'];
  51  
  52        if ($_DATE_TIMEZONE_DATA[$id]['hasdst'])
  53        {
  54          $this->hasdst = true;
  55          $this->dstlongname = $_DATE_TIMEZONE_DATA[$id]['dstlongname'];
  56          $this->dstshortname = $_DATE_TIMEZONE_DATA[$id]['dstshortname'];
  57        }
  58        else
  59        {
  60          $this->hasdst = false;
  61          $this->dstlongname = $this->longname;
  62          $this->dstshortname = $this->shortname;
  63        }
  64      }
  65      else
  66      {
  67        $this->id = 'UTC';
  68        $this->longname = $_DATE_TIMEZONE_DATA[$this->id]['longname'];
  69        $this->shortname = $_DATE_TIMEZONE_DATA[$this->id]['shortname'];
  70        $this->dstlongname = $this->longname;
  71        $this->dstshortname = $this->shortname;
  72        $this->hasdst = $_DATE_TIMEZONE_DATA[$this->id]['hasdst'];
  73        $this->offset = $_DATE_TIMEZONE_DATA[$this->id]['offset'];
  74      }
  75    }
  76  
  77    function getDefault()
  78    {
  79      global $_DATE_TIMEZONE_DEFAULT;
  80      return new lmbDateTimeZone($_DATE_TIMEZONE_DEFAULT);
  81    }
  82  
  83    function setDefault($id)
  84    {
  85      global $_DATE_TIMEZONE_DEFAULT;
  86      if (lmbDateTimeZone::isValidId($id))
  87        $_DATE_TIMEZONE_DEFAULT = $id;
  88    }
  89  
  90    function isValidId($id)
  91    {
  92      global $_DATE_TIMEZONE_DATA;
  93      if (isset($_DATE_TIMEZONE_DATA[$id]))
  94        return true;
  95      else
  96        return false;
  97    }
  98  
  99    /**

 100    * Is this time zone equal to another

 101    */
 102    function isEqual($tz)
 103    {
 104      if (strcasecmp($this->id, $tz->getId()) == 0)
 105        return true;
 106      else
 107        return false;
 108    }
 109  
 110    /**

 111    * Is this time zone equivalent to another

 112    *

 113    * Tests to see if this time zone is equivalent to

 114    * a given time zone object.  Equivalence in this context

 115    * is defined by the two time zones having an equal raw

 116    * offset and an equal setting of "hasdst".  This is not true

 117    * equivalence, as the two time zones may have different rules

 118    * for the observance of DST, but this implementation does not

 119    * know DST rules.

 120    */
 121    function isEquivalent($tz)
 122    {
 123      if ($this->offset == $tz->getRawOffset() &&  $this->hasdst == $tz->hasDaylightTime())
 124        return true;
 125      else
 126        return false;
 127    }
 128  
 129    /**

 130    * Returns true if this zone observes daylight savings time

 131    */
 132    function hasDaylightTime()
 133    {
 134      return $this->hasdst;
 135    }
 136  
 137    /**

 138    * Is the given date/time in DST for this time zone

 139    *

 140    * Attempts to determine if a given date object represents a date/time

 141    * that is in DST for this time zone.  WARNINGS: this basically attempts to

 142    * "trick" the system into telling us if we're in DST for a given time zone.

 143    * This uses putenv() which may not work in safe mode, and relies on unix time

 144    * which is only valid for dates from 1970 to ~2038.  This relies on the

 145    * underlying OS calls, so it may not work on Windows or on a system where

 146    * zoneinfo is not installed or configured properly.

 147    */
 148    function inDaylightTime($date)
 149    {
 150      $env_tz = '';
 151      if (getenv('TZ'))
 152        $env_tz = getenv('TZ');
 153  
 154      if($this->id)
 155        putenv('TZ=' . $this->id);
 156      $ltime = localtime($date->getStamp(), true);
 157  
 158      if($env_tz)
 159        putenv('TZ=' . $env_tz);
 160  
 161      return $ltime['tm_isdst'];
 162    }
 163  
 164    /**

 165    * Get the DST offset for this time zone

 166    *

 167    * Returns the DST offset of this time zone, in milliseconds,

 168    * if the zone observes DST, zero otherwise.  Currently the

 169    * DST offset is hard-coded to one hour.

 170    */
 171    function getDSTSavings()
 172    {
 173      if ($this->hasdst)
 174        return 3600000;
 175      else
 176        return 0;
 177    }
 178  
 179    /**

 180    * Get the DST-corrected offset to UTC for the given date

 181    *

 182    * Attempts to get the offset to UTC for a given date/time, taking into

 183    * account daylight savings time, if the time zone observes it and if

 184    * it is in effect.  Please see the WARNINGS on date_time_zone::in_daylight_time().

 185    */
 186    function getOffset($date)
 187    {
 188      if ($this->inDaylightTime($date))
 189        return $this->offset + $this->getDSTSavings();
 190      else
 191        return $this->offset;
 192    }
 193  
 194    /**

 195    * Returns the list of valid time zone id strings

 196    */
 197    function getAvailableIds()
 198    {
 199      global $_DATE_TIMEZONE_DATA;
 200      return array_keys($_DATE_TIMEZONE_DATA);
 201    }
 202  
 203    /**

 204    * Returns the time zone id  for this time zone, i.e. "America/Chicago"

 205    */
 206    function getId()
 207    {
 208      return $this->id;
 209    }
 210  
 211    /**

 212    * Returns the long name for this time zone,

 213    * i.e. "Central Standard Time"

 214    */
 215    function getLongName()
 216    {
 217      return $this->longname;
 218    }
 219  
 220    /**

 221    * Returns the short name for this time zone, i.e. "CST"

 222    */
 223    function getShortName()
 224    {
 225      return $this->shortname;
 226    }
 227  
 228    /**

 229    * Returns the DST long name for this time zone, i.e. "Central Daylight Time"

 230    */
 231    function getDSTLongName()
 232    {
 233      return $this->dstlongname;
 234    }
 235  
 236    /**

 237    * Returns the DST short name for this time zone, i.e. "CDT"

 238    */
 239    function getDSTShortName()
 240    {
 241      return $this->dstshortname;
 242    }
 243  
 244    /**

 245    * Returns the raw (non-DST-corrected) offset from UTC/GMT for this time zone

 246    */
 247    function getRawOffset()
 248    {
 249      return $this->offset;
 250    }
 251  }
 252  
 253  $GLOBALS['_DATE_TIMEZONE_DATA'] = array(
 254      'Etc/GMT+12' => array(
 255          'offset' => -43200000,
 256          'longname' => "GMT-12:00",
 257          'shortname' => 'GMT-12:00',
 258          'hasdst' => false ),
 259      'Etc/GMT+11' => array(
 260          'offset' => -39600000,
 261          'longname' => "GMT-11:00",
 262          'shortname' => 'GMT-11:00',
 263          'hasdst' => false ),
 264      'MIT' => array(
 265          'offset' => -39600000,
 266          'longname' => "West Samoa Time",
 267          'shortname' => 'WST',
 268          'hasdst' => false ),
 269      'Pacific/Apia' => array(
 270          'offset' => -39600000,
 271          'longname' => "West Samoa Time",
 272          'shortname' => 'WST',
 273          'hasdst' => false ),
 274      'Pacific/Midway' => array(
 275          'offset' => -39600000,
 276          'longname' => "Samoa Standard Time",
 277          'shortname' => 'SST',
 278          'hasdst' => false ),
 279      'Pacific/Niue' => array(
 280          'offset' => -39600000,
 281          'longname' => "Niue Time",
 282          'shortname' => 'NUT',
 283          'hasdst' => false ),
 284      'Pacific/Pago_Pago' => array(
 285          'offset' => -39600000,
 286          'longname' => "Samoa Standard Time",
 287          'shortname' => 'SST',
 288          'hasdst' => false ),
 289      'Pacific/Samoa' => array(
 290          'offset' => -39600000,
 291          'longname' => "Samoa Standard Time",
 292          'shortname' => 'SST',
 293          'hasdst' => false ),
 294      'US/Samoa' => array(
 295          'offset' => -39600000,
 296          'longname' => "Samoa Standard Time",
 297          'shortname' => 'SST',
 298          'hasdst' => false ),
 299      'America/Adak' => array(
 300          'offset' => -36000000,
 301          'longname' => "Hawaii-Aleutian Standard Time",
 302          'shortname' => 'HAST',
 303          'hasdst' => true,
 304          'dstlongname' => "Hawaii-Aleutian Daylight Time",
 305          'dstshortname' => 'HADT' ),
 306      'America/Atka' => array(
 307          'offset' => -36000000,
 308          'longname' => "Hawaii-Aleutian Standard Time",
 309          'shortname' => 'HAST',
 310          'hasdst' => true,
 311          'dstlongname' => "Hawaii-Aleutian Daylight Time",
 312          'dstshortname' => 'HADT' ),
 313      'Etc/GMT+10' => array(
 314          'offset' => -36000000,
 315          'longname' => "GMT-10:00",
 316          'shortname' => 'GMT-10:00',
 317          'hasdst' => false ),
 318      'HST' => array(
 319          'offset' => -36000000,
 320          'longname' => "Hawaii Standard Time",
 321          'shortname' => 'HST',
 322          'hasdst' => false ),
 323      'Pacific/Fakaofo' => array(
 324          'offset' => -36000000,
 325          'longname' => "Tokelau Time",
 326          'shortname' => 'TKT',
 327          'hasdst' => false ),
 328      'Pacific/Honolulu' => array(
 329          'offset' => -36000000,
 330          'longname' => "Hawaii Standard Time",
 331          'shortname' => 'HST',
 332          'hasdst' => false ),
 333      'Pacific/Johnston' => array(
 334          'offset' => -36000000,
 335          'longname' => "Hawaii Standard Time",
 336          'shortname' => 'HST',
 337          'hasdst' => false ),
 338      'Pacific/Rarotonga' => array(
 339          'offset' => -36000000,
 340          'longname' => "Cook Is. Time",
 341          'shortname' => 'CKT',
 342          'hasdst' => false ),
 343      'Pacific/Tahiti' => array(
 344          'offset' => -36000000,
 345          'longname' => "Tahiti Time",
 346          'shortname' => 'TAHT',
 347          'hasdst' => false ),
 348      'SystemV/HST10' => array(
 349          'offset' => -36000000,
 350          'longname' => "Hawaii Standard Time",
 351          'shortname' => 'HST',
 352          'hasdst' => false ),
 353      'US/Aleutian' => array(
 354          'offset' => -36000000,
 355          'longname' => "Hawaii-Aleutian Standard Time",
 356          'shortname' => 'HAST',
 357          'hasdst' => true,
 358          'dstlongname' => "Hawaii-Aleutian Daylight Time",
 359          'dstshortname' => 'HADT' ),
 360      'US/Hawaii' => array(
 361          'offset' => -36000000,
 362          'longname' => "Hawaii Standard Time",
 363          'shortname' => 'HST',
 364          'hasdst' => false ),
 365      'Pacific/Marquesas' => array(
 366          'offset' => -34200000,
 367          'longname' => "Marquesas Time",
 368          'shortname' => 'MART',
 369          'hasdst' => false ),
 370      'AST' => array(
 371          'offset' => -32400000,
 372          'longname' => "Alaska Standard Time",
 373          'shortname' => 'AKST',
 374          'hasdst' => true,
 375          'dstlongname' => "Alaska Daylight Time",
 376          'dstshortname' => 'AKDT' ),
 377      'America/Anchorage' => array(
 378          'offset' => -32400000,
 379          'longname' => "Alaska Standard Time",
 380          'shortname' => 'AKST',
 381          'hasdst' => true,
 382          'dstlongname' => "Alaska Daylight Time",
 383          'dstshortname' => 'AKDT' ),
 384      'America/Juneau' => array(
 385          'offset' => -32400000,
 386          'longname' => "Alaska Standard Time",
 387          'shortname' => 'AKST',
 388          'hasdst' => true,
 389          'dstlongname' => "Alaska Daylight Time",
 390          'dstshortname' => 'AKDT' ),
 391      'America/Nome' => array(
 392          'offset' => -32400000,
 393          'longname' => "Alaska Standard Time",
 394          'shortname' => 'AKST',
 395          'hasdst' => true,
 396          'dstlongname' => "Alaska Daylight Time",
 397          'dstshortname' => 'AKDT' ),
 398      'America/Yakutat' => array(
 399          'offset' => -32400000,
 400          'longname' => "Alaska Standard Time",
 401          'shortname' => 'AKST',
 402          'hasdst' => true,
 403          'dstlongname' => "Alaska Daylight Time",
 404          'dstshortname' => 'AKDT' ),
 405      'Etc/GMT+9' => array(
 406          'offset' => -32400000,
 407          'longname' => "GMT-09:00",
 408          'shortname' => 'GMT-09:00',
 409          'hasdst' => false ),
 410      'Pacific/Gambier' => array(
 411          'offset' => -32400000,
 412          'longname' => "Gambier Time",
 413          'shortname' => 'GAMT',
 414          'hasdst' => false ),
 415      'SystemV/YST9' => array(
 416          'offset' => -32400000,
 417          'longname' => "Gambier Time",
 418          'shortname' => 'GAMT',
 419          'hasdst' => false ),
 420      'SystemV/YST9YDT' => array(
 421          'offset' => -32400000,
 422          'longname' => "Alaska Standard Time",
 423          'shortname' => 'AKST',
 424          'hasdst' => true,
 425          'dstlongname' => "Alaska Daylight Time",
 426          'dstshortname' => 'AKDT' ),
 427      'US/Alaska' => array(
 428          'offset' => -32400000,
 429          'longname' => "Alaska Standard Time",
 430          'shortname' => 'AKST',
 431          'hasdst' => true,
 432          'dstlongname' => "Alaska Daylight Time",
 433          'dstshortname' => 'AKDT' ),
 434      'America/Dawson' => array(
 435          'offset' => -28800000,
 436          'longname' => "Pacific Standard Time",
 437          'shortname' => 'PST',
 438          'hasdst' => true,
 439          'dstlongname' => "Pacific Daylight Time",
 440          'dstshortname' => 'PDT' ),
 441      'America/Ensenada' => array(
 442          'offset' => -28800000,
 443          'longname' => "Pacific Standard Time",
 444          'shortname' => 'PST',
 445          'hasdst' => true,
 446          'dstlongname' => "Pacific Daylight Time",
 447          'dstshortname' => 'PDT' ),
 448      'America/Los_Angeles' => array(
 449          'offset' => -28800000,
 450          'longname' => "Pacific Standard Time",
 451          'shortname' => 'PST',
 452          'hasdst' => true,
 453          'dstlongname' => "Pacific Daylight Time",
 454          'dstshortname' => 'PDT' ),
 455      'America/Tijuana' => array(
 456          'offset' => -28800000,
 457          'longname' => "Pacific Standard Time",
 458          'shortname' => 'PST',
 459          'hasdst' => true,
 460          'dstlongname' => "Pacific Daylight Time",
 461          'dstshortname' => 'PDT' ),
 462      'America/Vancouver' => array(
 463          'offset' => -28800000,
 464          'longname' => "Pacific Standard Time",
 465          'shortname' => 'PST',
 466          'hasdst' => true,
 467          'dstlongname' => "Pacific Daylight Time",
 468          'dstshortname' => 'PDT' ),
 469      'America/Whitehorse' => array(
 470          'offset' => -28800000,
 471          'longname' => "Pacific Standard Time",
 472          'shortname' => 'PST',
 473          'hasdst' => true,
 474          'dstlongname' => "Pacific Daylight Time",
 475          'dstshortname' => 'PDT' ),
 476      'Canada/Pacific' => array(
 477          'offset' => -28800000,
 478          'longname' => "Pacific Standard Time",
 479          'shortname' => 'PST',
 480          'hasdst' => true,
 481          'dstlongname' => "Pacific Daylight Time",
 482          'dstshortname' => 'PDT' ),
 483      'Canada/Yukon' => array(
 484          'offset' => -28800000,
 485          'longname' => "Pacific Standard Time",
 486          'shortname' => 'PST',
 487          'hasdst' => true,
 488          'dstlongname' => "Pacific Daylight Time",
 489          'dstshortname' => 'PDT' ),
 490      'Etc/GMT+8' => array(
 491          'offset' => -28800000,
 492          'longname' => "GMT-08:00",
 493          'shortname' => 'GMT-08:00',
 494          'hasdst' => false ),
 495      'Mexico/BajaNorte' => array(
 496          'offset' => -28800000,
 497          'longname' => "Pacific Standard Time",
 498          'shortname' => 'PST',
 499          'hasdst' => true,
 500          'dstlongname' => "Pacific Daylight Time",
 501          'dstshortname' => 'PDT' ),
 502      'PST' => array(
 503          'offset' => -28800000,
 504          'longname' => "Pacific Standard Time",
 505          'shortname' => 'PST',
 506          'hasdst' => true,
 507          'dstlongname' => "Pacific Daylight Time",
 508          'dstshortname' => 'PDT' ),
 509      'PST8PDT' => array(
 510          'offset' => -28800000,
 511          'longname' => "Pacific Standard Time",
 512          'shortname' => 'PST',
 513          'hasdst' => true,
 514          'dstlongname' => "Pacific Daylight Time",
 515          'dstshortname' => 'PDT' ),
 516      'Pacific/Pitcairn' => array(
 517          'offset' => -28800000,
 518          'longname' => "Pitcairn Standard Time",
 519          'shortname' => 'PST',
 520          'hasdst' => false ),
 521      'SystemV/PST8' => array(
 522          'offset' => -28800000,
 523          'longname' => "Pitcairn Standard Time",
 524          'shortname' => 'PST',
 525          'hasdst' => false ),
 526      'SystemV/PST8PDT' => array(
 527          'offset' => -28800000,
 528          'longname' => "Pacific Standard Time",
 529          'shortname' => 'PST',
 530          'hasdst' => true,
 531          'dstlongname' => "Pacific Daylight Time",
 532          'dstshortname' => 'PDT' ),
 533      'US/Pacific' => array(
 534          'offset' => -28800000,
 535          'longname' => "Pacific Standard Time",
 536          'shortname' => 'PST',
 537          'hasdst' => true,
 538          'dstlongname' => "Pacific Daylight Time",
 539          'dstshortname' => 'PDT' ),
 540      'US/Pacific-New' => array(
 541          'offset' => -28800000,
 542          'longname' => "Pacific Standard Time",
 543          'shortname' => 'PST',
 544          'hasdst' => true,
 545          'dstlongname' => "Pacific Daylight Time",
 546          'dstshortname' => 'PDT' ),
 547      'America/Boise' => array(
 548          'offset' => -25200000,
 549          'longname' => "Mountain Standard Time",
 550          'shortname' => 'MST',
 551          'hasdst' => true,
 552          'dstlongname' => "Mountain Daylight Time",
 553          'dstshortname' => 'MDT' ),
 554      'America/Cambridge_Bay' => array(
 555          'offset' => -25200000,
 556          'longname' => "Mountain Standard Time",
 557          'shortname' => 'MST',
 558          'hasdst' => true,
 559          'dstlongname' => "Mountain Daylight Time",
 560          'dstshortname' => 'MDT' ),
 561      'America/Chihuahua' => array(
 562          'offset' => -25200000,
 563          'longname' => "Mountain Standard Time",
 564          'shortname' => 'MST',
 565          'hasdst' => true,
 566          'dstlongname' => "Mountain Daylight Time",
 567          'dstshortname' => 'MDT' ),
 568      'America/Dawson_Creek' => array(
 569          'offset' => -25200000,
 570          'longname' => "Mountain Standard Time",
 571          'shortname' => 'MST',
 572          'hasdst' => false ),
 573      'America/Denver' => array(
 574          'offset' => -25200000,
 575          'longname' => "Mountain Standard Time",
 576          'shortname' => 'MST',
 577          'hasdst' => true,
 578          'dstlongname' => "Mountain Daylight Time",
 579          'dstshortname' => 'MDT' ),
 580      'America/Edmonton' => array(
 581          'offset' => -25200000,
 582          'longname' => "Mountain Standard Time",
 583          'shortname' => 'MST',
 584          'hasdst' => true,
 585          'dstlongname' => "Mountain Daylight Time",
 586          'dstshortname' => 'MDT' ),
 587      'America/Hermosillo' => array(
 588          'offset' => -25200000,
 589          'longname' => "Mountain Standard Time",
 590          'shortname' => 'MST',
 591          'hasdst' => false ),
 592      'America/Inuvik' => array(
 593          'offset' => -25200000,
 594          'longname' => "Mountain Standard Time",
 595          'shortname' => 'MST',
 596          'hasdst' => true,
 597          'dstlongname' => "Mountain Daylight Time",
 598          'dstshortname' => 'MDT' ),
 599      'America/Mazatlan' => array(
 600          'offset' => -25200000,
 601          'longname' => "Mountain Standard Time",
 602          'shortname' => 'MST',
 603          'hasdst' => true,
 604          'dstlongname' => "Mountain Daylight Time",
 605          'dstshortname' => 'MDT' ),
 606      'America/Phoenix' => array(
 607          'offset' => -25200000,
 608          'longname' => "Mountain Standard Time",
 609          'shortname' => 'MST',
 610          'hasdst' => false ),
 611      'America/Shiprock' => array(
 612          'offset' => -25200000,
 613          'longname' => "Mountain Standard Time",
 614          'shortname' => 'MST',
 615          'hasdst' => true,
 616          'dstlongname' => "Mountain Daylight Time",
 617          'dstshortname' => 'MDT' ),
 618      'America/Yellowknife' => array(
 619          'offset' => -25200000,
 620          'longname' => "Mountain Standard Time",
 621          'shortname' => 'MST',
 622          'hasdst' => true,
 623          'dstlongname' => "Mountain Daylight Time",
 624          'dstshortname' => 'MDT' ),
 625      'Canada/Mountain' => array(
 626          'offset' => -25200000,
 627          'longname' => "Mountain Standard Time",
 628          'shortname' => 'MST',
 629          'hasdst' => true,
 630          'dstlongname' => "Mountain Daylight Time",
 631          'dstshortname' => 'MDT' ),
 632      'Etc/GMT+7' => array(
 633          'offset' => -25200000,
 634          'longname' => "GMT-07:00",
 635          'shortname' => 'GMT-07:00',
 636          'hasdst' => false ),
 637      'MST' => array(
 638          'offset' => -25200000,
 639          'longname' => "Mountain Standard Time",
 640          'shortname' => 'MST',
 641          'hasdst' => true,
 642          'dstlongname' => "Mountain Daylight Time",
 643          'dstshortname' => 'MDT' ),
 644      'MST7MDT' => array(
 645          'offset' => -25200000,
 646          'longname' => "Mountain Standard Time",
 647          'shortname' => 'MST',
 648          'hasdst' => true,
 649          'dstlongname' => "Mountain Daylight Time",
 650          'dstshortname' => 'MDT' ),
 651      'Mexico/BajaSur' => array(
 652          'offset' => -25200000,
 653          'longname' => "Mountain Standard Time",
 654          'shortname' => 'MST',
 655          'hasdst' => true,
 656          'dstlongname' => "Mountain Daylight Time",
 657          'dstshortname' => 'MDT' ),
 658      'Navajo' => array(
 659          'offset' => -25200000,
 660          'longname' => "Mountain Standard Time",
 661          'shortname' => 'MST',
 662          'hasdst' => true,
 663          'dstlongname' => "Mountain Daylight Time",
 664          'dstshortname' => 'MDT' ),
 665      'PNT' => array(
 666          'offset' => -25200000,
 667          'longname' => "Mountain Standard Time",
 668          'shortname' => 'MST',
 669          'hasdst' => false ),
 670      'SystemV/MST7' => array(
 671          'offset' => -25200000,
 672          'longname' => "Mountain Standard Time",
 673          'shortname' => 'MST',
 674          'hasdst' => false ),
 675      'SystemV/MST7MDT' => array(
 676          'offset' => -25200000,
 677          'longname' => "Mountain Standard Time",
 678          'shortname' => 'MST',
 679          'hasdst' => true,
 680          'dstlongname' => "Mountain Daylight Time",
 681          'dstshortname' => 'MDT' ),
 682      'US/Arizona' => array(
 683          'offset' => -25200000,
 684          'longname' => "Mountain Standard Time",
 685          'shortname' => 'MST',
 686          'hasdst' => false ),
 687      'US/Mountain' => array(
 688          'offset' => -25200000,
 689          'longname' => "Mountain Standard Time",
 690          'shortname' => 'MST',
 691          'hasdst' => true,
 692          'dstlongname' => "Mountain Daylight Time",
 693          'dstshortname' => 'MDT' ),
 694      'America/Belize' => array(
 695          'offset' => -21600000,
 696          'longname' => "Central Standard Time",
 697          'shortname' => 'CST',
 698          'hasdst' => false ),
 699      'America/Cancun' => array(
 700          'offset' => -21600000,
 701          'longname' => "Central Standard Time",
 702          'shortname' => 'CST',
 703          'hasdst' => true,
 704          'dstlongname' => "Central Daylight Time",
 705          'dstshortname' => 'CDT' ),
 706      'America/Chicago' => array(
 707          'offset' => -21600000,
 708          'longname' => "Central Standard Time",
 709          'shortname' => 'CST',
 710          'hasdst' => true,
 711          'dstlongname' => "Central Daylight Time",
 712          'dstshortname' => 'CDT' ),
 713      'America/Costa_Rica' => array(
 714          'offset' => -21600000,
 715          'longname' => "Central Standard Time",
 716          'shortname' => 'CST',
 717          'hasdst' => false ),
 718      'America/El_Salvador' => array(
 719          'offset' => -21600000,
 720          'longname' => "Central Standard Time",
 721          'shortname' => 'CST',
 722          'hasdst' => false ),
 723      'America/Guatemala' => array(
 724          'offset' => -21600000,
 725          'longname' => "Central Standard Time",
 726          'shortname' => 'CST',
 727          'hasdst' => false ),
 728      'America/Managua' => array(
 729          'offset' => -21600000,
 730          'longname' => "Central Standard Time",
 731          'shortname' => 'CST',
 732          'hasdst' => false ),
 733      'America/Menominee' => array(
 734          'offset' => -21600000,
 735          'longname' => "Central Standard Time",
 736          'shortname' => 'CST',
 737          'hasdst' => true,
 738          'dstlongname' => "Central Daylight Time",
 739          'dstshortname' => 'CDT' ),
 740      'America/Merida' => array(
 741          'offset' => -21600000,
 742          'longname' => "Central Standard Time",
 743          'shortname' => 'CST',
 744          'hasdst' => true,
 745          'dstlongname' => "Central Daylight Time",
 746          'dstshortname' => 'CDT' ),
 747      'America/Mexico_City' => array(
 748          'offset' => -21600000,
 749          'longname' => "Central Standard Time",
 750          'shortname' => 'CST',
 751          'hasdst' => false ),
 752      'America/Monterrey' => array(
 753          'offset' => -21600000,
 754          'longname' => "Central Standard Time",
 755          'shortname' => 'CST',
 756          'hasdst' => true,
 757          'dstlongname' => "Central Daylight Time",
 758          'dstshortname' => 'CDT' ),
 759      'America/North_Dakota/Center' => array(
 760          'offset' => -21600000,
 761          'longname' => "Central Standard Time",
 762          'shortname' => 'CST',
 763          'hasdst' => true,
 764          'dstlongname' => "Central Daylight Time",
 765          'dstshortname' => 'CDT' ),
 766      'America/Rainy_River' => array(
 767          'offset' => -21600000,
 768          'longname' => "Central Standard Time",
 769          'shortname' => 'CST',
 770          'hasdst' => true,
 771          'dstlongname' => "Central Daylight Time",
 772          'dstshortname' => 'CDT' ),
 773      'America/Rankin_Inlet' => array(
 774          'offset' => -21600000,
 775          'longname' => "Eastern Standard Time",
 776          'shortname' => 'EST',
 777          'hasdst' => true,
 778          'dstlongname' => "Eastern Daylight Time",
 779          'dstshortname' => 'EDT' ),
 780      'America/Regina' => array(
 781          'offset' => -21600000,
 782          'longname' => "Central Standard Time",
 783          'shortname' => 'CST',
 784          'hasdst' => false ),
 785      'America/Swift_Current' => array(
 786          'offset' => -21600000,
 787          'longname' => "Central Standard Time",
 788          'shortname' => 'CST',
 789          'hasdst' => false ),
 790      'America/Tegucigalpa' => array(
 791          'offset' => -21600000,
 792          'longname' => "Central Standard Time",
 793          'shortname' => 'CST',
 794          'hasdst' => false ),
 795      'America/Winnipeg' => array(
 796          'offset' => -21600000,
 797          'longname' => "Central Standard Time",
 798          'shortname' => 'CST',
 799          'hasdst' => true,
 800          'dstlongname' => "Central Daylight Time",
 801          'dstshortname' => 'CDT' ),
 802      'CST' => array(
 803          'offset' => -21600000,
 804          'longname' => "Central Standard Time",
 805          'shortname' => 'CST',
 806          'hasdst' => true,
 807          'dstlongname' => "Central Daylight Time",
 808          'dstshortname' => 'CDT' ),
 809      'CST6CDT' => array(
 810          'offset' => -21600000,
 811          'longname' => "Central Standard Time",
 812          'shortname' => 'CST',
 813          'hasdst' => true,
 814          'dstlongname' => "Central Daylight Time",
 815          'dstshortname' => 'CDT' ),
 816      'Canada/Central' => array(
 817          'offset' => -21600000,
 818          'longname' => "Central Standard Time",
 819          'shortname' => 'CST',
 820          'hasdst' => true,
 821          'dstlongname' => "Central Daylight Time",
 822          'dstshortname' => 'CDT' ),
 823      'Canada/East-Saskatchewan' => array(
 824          'offset' => -21600000,
 825          'longname' => "Central Standard Time",
 826          'shortname' => 'CST',
 827          'hasdst' => false ),
 828      'Canada/Saskatchewan' => array(
 829          'offset' => -21600000,
 830          'longname' => "Central Standard Time",
 831          'shortname' => 'CST',
 832          'hasdst' => false ),
 833      'Chile/EasterIsland' => array(
 834          'offset' => -21600000,
 835          'longname' => "Easter Is. Time",
 836          'shortname' => 'EAST',
 837          'hasdst' => true,
 838          'dstlongname' => "Easter Is. Summer Time",
 839          'dstshortname' => 'EASST' ),
 840      'Etc/GMT+6' => array(
 841          'offset' => -21600000,
 842          'longname' => "GMT-06:00",
 843          'shortname' => 'GMT-06:00',
 844          'hasdst' => false ),
 845      'Mexico/General' => array(
 846          'offset' => -21600000,
 847          'longname' => "Central Standard Time",
 848          'shortname' => 'CST',
 849          'hasdst' => false ),
 850      'Pacific/Easter' => array(
 851          'offset' => -21600000,
 852          'longname' => "Easter Is. Time",
 853          'shortname' => 'EAST',
 854          'hasdst' => true,
 855          'dstlongname' => "Easter Is. Summer Time",
 856          'dstshortname' => 'EASST' ),
 857      'Pacific/Galapagos' => array(
 858          'offset' => -21600000,
 859          'longname' => "Galapagos Time",
 860          'shortname' => 'GALT',
 861          'hasdst' => false ),
 862      'SystemV/CST6' => array(
 863          'offset' => -21600000,
 864          'longname' => "Central Standard Time",
 865          'shortname' => 'CST',
 866          'hasdst' => false ),
 867      'SystemV/CST6CDT' => array(
 868          'offset' => -21600000,
 869          'longname' => "Central Standard Time",
 870          'shortname' => 'CST',
 871          'hasdst' => true,
 872          'dstlongname' => "Central Daylight Time",
 873          'dstshortname' => 'CDT' ),
 874      'US/Central' => array(
 875          'offset' => -21600000,
 876          'longname' => "Central Standard Time",
 877          'shortname' => 'CST',
 878          'hasdst' => true,
 879          'dstlongname' => "Central Daylight Time",
 880          'dstshortname' => 'CDT' ),
 881      'America/Bogota' => array(
 882          'offset' => -18000000,
 883          'longname' => "Colombia Time",
 884          'shortname' => 'COT',
 885          'hasdst' => false ),
 886      'America/Cayman' => array(
 887          'offset' => -18000000,
 888          'longname' => "Eastern Standard Time",
 889          'shortname' => 'EST',
 890          'hasdst' => false ),
 891      'America/Detroit' => array(
 892          'offset' => -18000000,
 893          'longname' => "Eastern Standard Time",
 894          'shortname' => 'EST',
 895          'hasdst' => true,
 896          'dstlongname' => "Eastern Daylight Time",
 897          'dstshortname' => 'EDT' ),
 898      'America/Eirunepe' => array(
 899          'offset' => -18000000,
 900          'longname' => "Acre Time",
 901          'shortname' => 'ACT',
 902          'hasdst' => false ),
 903      'America/Fort_Wayne' => array(
 904          'offset' => -18000000,
 905          'longname' => "Eastern Standard Time",
 906          'shortname' => 'EST',
 907          'hasdst' => false ),
 908      'America/Grand_Turk' => array(
 909          'offset' => -18000000,
 910          'longname' => "Eastern Standard Time",
 911          'shortname' => 'EST',
 912          'hasdst' => true,
 913          'dstlongname' => "Eastern Daylight Time",
 914          'dstshortname' => 'EDT' ),
 915      'America/Guayaquil' => array(
 916          'offset' => -18000000,
 917          'longname' => "Ecuador Time",
 918          'shortname' => 'ECT',
 919          'hasdst' => false ),
 920      'America/Havana' => array(
 921          'offset' => -18000000,
 922          'longname' => "Central Standard Time",
 923          'shortname' => 'CST',
 924          'hasdst' => true,
 925          'dstlongname' => "Central Daylight Time",
 926          'dstshortname' => 'CDT' ),
 927      'America/Indiana/Indianapolis' => array(
 928          'offset' => -18000000,
 929          'longname' => "Eastern Standard Time",
 930          'shortname' => 'EST',
 931          'hasdst' => false ),
 932      'America/Indiana/Knox' => array(
 933          'offset' => -18000000,
 934          'longname' => "Eastern Standard Time",
 935          'shortname' => 'EST',
 936          'hasdst' => false ),
 937      'America/Indiana/Marengo' => array(
 938          'offset' => -18000000,
 939          'longname' => "Eastern Standard Time",
 940          'shortname' => 'EST',
 941          'hasdst' => false ),
 942      'America/Indiana/Vevay' => array(
 943          'offset' => -18000000,
 944          'longname' => "Eastern Standard Time",
 945          'shortname' => 'EST',
 946          'hasdst' => false ),
 947      'America/Indianapolis' => array(
 948          'offset' => -18000000,
 949          'longname' => "Eastern Standard Time",
 950          'shortname' => 'EST',
 951          'hasdst' => false ),
 952      'America/Iqaluit' => array(
 953          'offset' => -18000000,
 954          'longname' => "Eastern Standard Time",
 955          'shortname' => 'EST',
 956          'hasdst' => true,
 957          'dstlongname' => "Eastern Daylight Time",
 958          'dstshortname' => 'EDT' ),
 959      'America/Jamaica' => array(
 960          'offset' => -18000000,
 961          'longname' => "Eastern Standard Time",
 962          'shortname' => 'EST',
 963          'hasdst' => false ),
 964      'America/Kentucky/Louisville' => array(
 965          'offset' => -18000000,
 966          'longname' => "Eastern Standard Time",
 967          'shortname' => 'EST',
 968          'hasdst' => true,
 969          'dstlongname' => "Eastern Daylight Time",
 970          'dstshortname' => 'EDT' ),
 971      'America/Kentucky/Monticello' => array(
 972          'offset' => -18000000,
 973          'longname' => "Eastern Standard Time",
 974          'shortname' => 'EST',
 975          'hasdst' => true,
 976          'dstlongname' => "Eastern Daylight Time",
 977          'dstshortname' => 'EDT' ),
 978      'America/Knox_IN' => array(
 979          'offset' => -18000000,
 980          'longname' => "Eastern Standard Time",
 981          'shortname' => 'EST',
 982          'hasdst' => false ),
 983      'America/Lima' => array(
 984          'offset' => -18000000,
 985          'longname' => "Peru Time",
 986          'shortname' => 'PET',
 987          'hasdst' => false ),
 988      'America/Louisville' => array(
 989          'offset' => -18000000,
 990          'longname' => "Eastern Standard Time",
 991          'shortname' => 'EST',
 992          'hasdst' => true,
 993          'dstlongname' => "Eastern Daylight Time",
 994          'dstshortname' => 'EDT' ),
 995      'America/Montreal' => array(
 996          'offset' => -18000000,
 997          'longname' => "Eastern Standard Time",
 998          'shortname' => 'EST',
 999          'hasdst' => true,
1000          'dstlongname' => "Eastern Daylight Time",
1001          'dstshortname' => 'EDT' ),
1002      'America/Nassau' => array(
1003          'offset' => -18000000,
1004          'longname' => "Eastern Standard Time",
1005          'shortname' => 'EST',
1006          'hasdst' => true,
1007          'dstlongname' => "Eastern Daylight Time",
1008          'dstshortname' => 'EDT' ),
1009      'America/New_York' => array(
1010          'offset' => -18000000,
1011          'longname' => "Eastern Standard Time",
1012          'shortname' => 'EST',
1013          'hasdst' => true,
1014          'dstlongname' => "Eastern Daylight Time",
1015          'dstshortname' => 'EDT' ),
1016      'America/Nipigon' => array(
1017          'offset' => -18000000,
1018          'longname' => "Eastern Standard Time",
1019          'shortname' => 'EST',
1020          'hasdst' => true,
1021          'dstlongname' => "Eastern Daylight Time",
1022          'dstshortname' => 'EDT' ),
1023      'America/Panama' => array(
1024          'offset' => -18000000,
1025          'longname' => "Eastern Standard Time",
1026          'shortname' => 'EST',
1027          'hasdst' => false ),
1028      'America/Pangnirtung' => array(
1029          'offset' => -18000000,
1030          'longname' => "Eastern Standard Time",
1031          'shortname' => 'EST',
1032          'hasdst' => true,
1033          'dstlongname' => "Eastern Daylight Time",
1034          'dstshortname' => 'EDT' ),
1035      'America/Port-au-Prince' => array(
1036          'offset' => -18000000,
1037          'longname' => "Eastern Standard Time",
1038          'shortname' => 'EST',
1039          'hasdst' => false ),
1040      'America/Porto_Acre' => array(
1041          'offset' => -18000000,
1042          'longname' => "Acre Time",
1043          'shortname' => 'ACT',
1044          'hasdst' => false ),
1045      'America/Rio_Branco' => array(
1046          'offset' => -18000000,
1047          'longname' => "Acre Time",
1048          'shortname' => 'ACT',
1049          'hasdst' => false ),
1050      'America/Thunder_Bay' => array(
1051          'offset' => -18000000,
1052          'longname' => "Eastern Standard Time",
1053          'shortname' => 'EST',
1054          'hasdst' => true,
1055          'dstlongname' => "Eastern Daylight Time",
1056          'dstshortname' => 'EDT' ),
1057      'Brazil/Acre' => array(