/**
  * {@inheritdoc}
  */
 public function reverseTransform($rfc3339)
 {
     if (!is_string($rfc3339)) {
         throw new TransformationFailedException('Expected a string.');
     }
     if ('' === $rfc3339) {
         return;
     }
     try {
         $dateTime = new Date($rfc3339);
     } catch (\Exception $e) {
         throw new TransformationFailedException($e->getMessage(), $e->getCode(), $e);
     }
     if ($this->outputTimezone !== $dateTime->getTimezone()->getName()) {
         try {
             $dateTime->setTimezone(new \DateTimeZone($this->inputTimezone));
         } catch (\Exception $e) {
             throw new TransformationFailedException($e->getMessage(), $e->getCode(), $e);
         }
     }
     if (preg_match('/(\\d{4})-(\\d{2})-(\\d{2})/', $rfc3339, $matches)) {
         if (!checkdate($matches[2], $matches[3], $matches[1])) {
             throw new TransformationFailedException(sprintf('The date "%s-%s-%s" is not a valid date.', $matches[1], $matches[2], $matches[3]));
         }
     }
     return $dateTime;
 }
 /**
  * Transforms a localized date string/array into a normalized date.
  *
  * @param string|array $value Localized date string/array
  *
  * @return \DateTime Normalized date
  *
  * @throws TransformationFailedException if the given value is not a string,
  *                                       if the date could not be parsed or
  *                                       if the input timezone is not supported
  */
 public function reverseTransform($value)
 {
     if (!is_string($value)) {
         throw new TransformationFailedException('Expected a string.');
     }
     if ('' === $value) {
         return;
     }
     $timestamp = $this->getIntlDateFormatter()->parse($value);
     if (intl_get_error_code() != 0) {
         throw new TransformationFailedException(intl_get_error_message());
     }
     try {
         // read timestamp into DateTime object - the formatter delivers in UTC
         $dateTime = new Date(sprintf('@%s UTC', $timestamp));
     } catch (\Exception $e) {
         throw new TransformationFailedException($e->getMessage(), $e->getCode(), $e);
     }
     if ('UTC' !== $this->inputTimezone) {
         try {
             $dateTime->setTimezone(new \DateTimeZone($this->inputTimezone));
         } catch (\Exception $e) {
             throw new TransformationFailedException($e->getMessage(), $e->getCode(), $e);
         }
     }
     return $dateTime;
 }