title: DateTime::getTimezone doesn't return timezone name, but offset
body: <pre><code>&lt;?php
  $first = '2011-04-27';
  $second = '2011-04-27 16:20:12';
  $third = '2011-04-27 16:20:12+00';
  
  $dt = new DateTime($first);
  $dt-&gt;setTimeZone(new DateTimeZone($dt-&gt;getTimeZone()-&gt;getName()));
  echo $dt-&gt;getTimezone()-&gt;getName().'&lt;br /&gt;';
  // OK
  $dt = new DateTime($second);
  $dt-&gt;setTimeZone(new DateTimeZone($dt-&gt;getTimeZone()-&gt;getName()));
  echo $dt-&gt;getTimezone()-&gt;getName().'&lt;br /&gt;';
  // OK
  $dt = new DateTime($third);
  $dt-&gt;setTimeZone(new DateTimeZone($dt-&gt;getTimeZone()-&gt;getName()));
  echo $dt-&gt;getTimezone()-&gt;getName().'&lt;br /&gt;';
  // Error
  // -&gt;getName() returns unexpectedly +00, which is not a name, but offset
  </code></pre>
  
  <p>DateTime extracts from the last string timezone <strong>name</strong> <code>+00</code>, which is really not <strong>name</strong>, but <strong>offset</strong> and therefore cannot be set as timezone...</p>
  
  <p>This behavior is causing troubles when (de)serializing DateTime object...</p>
  
  <pre><code>public function __sleep()
  {
      $this-&gt;fix = array($this-&gt;format('Y-m-d H:i:s'), $this-&gt;getTimezone()-&gt;getName());
      return array('fix');
  }
  
  public function __wakeup()
  {
      $this-&gt;__construct($this-&gt;fix[0], new DateTimeZone($this-&gt;fix[1]));
      unset($this-&gt;fix);
  }
  </code></pre>
  
  <p>I know it would be better to get e.g. this string: <code>2011-04-27 16:20:12 UTC</code>, anyway as far as the metod is called <code>getName()</code>, it shouldn't return <code>+00</code> as a name, or should?</p>