/**
  * Checks if the given value is a valid DateTime object.
  *
  * @param mixed $value The value that should be validated
  * @return void
  * @api
  */
 protected function isValid($value)
 {
     if ($value instanceof \DateTime) {
         return;
     }
     if (!isset($this->options['locale'])) {
         $locale = $this->localizationService->getConfiguration()->getDefaultLocale();
     } elseif (is_string($this->options['locale'])) {
         $locale = new \TYPO3\Flow\I18n\Locale($this->options['locale']);
     } elseif ($this->options['locale'] instanceof \TYPO3\Flow\I18n\Locale) {
         $locale = $this->options['locale'];
     } else {
         $this->addError('The "locale" option can be only set to string identifier, or Locale object.', 1281454676);
         return;
     }
     $strictMode = $this->options['strictMode'];
     $formatLength = $this->options['formatLength'];
     \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::validateFormatLength($formatLength);
     $formatType = $this->options['formatType'];
     \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::validateFormatType($formatType);
     if ($formatType === \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::FORMAT_TYPE_TIME) {
         if ($this->datetimeParser->parseTime($value, $locale, $formatLength, $strictMode) === FALSE) {
             $this->addError('A valid time is expected.', 1281454830);
         }
     } elseif ($formatType === \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::FORMAT_TYPE_DATETIME) {
         if ($this->datetimeParser->parseDateAndTime($value, $locale, $formatLength, $strictMode) === FALSE) {
             $this->addError('A valid date and time is expected.', 1281454831);
         }
     } else {
         if ($this->datetimeParser->parseDate($value, $locale, $formatLength, $strictMode) === FALSE) {
             $this->addError('A valid date is expected.', 1281454832);
         }
     }
 }
 /**
  * Parses dateTime with format string for date and time defined in CLDR for
  * particular locale.
  *
  * @param string $dateAndTimeToParse Date and time to be parsed
  * @param \TYPO3\Flow\I18n\Locale $locale
  * @param string $formatLength One of: full, long, medium, short, or 'default' in order to use default length from CLDR
  * @param boolean $strictMode Work mode (strict when TRUE, lenient when FALSE)
  * @return mixed Array of parsed date and time elements, FALSE on failure
  */
 public function parseDateAndTime($dateAndTimeToParse, \TYPO3\Flow\I18n\Locale $locale, $formatLength = \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::FORMAT_LENGTH_DEFAULT, $strictMode = true)
 {
     \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::validateFormatLength($formatLength);
     return $this->doParsingWithParsedFormat($dateAndTimeToParse, $this->datesReader->parseFormatFromCldr($locale, \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::FORMAT_TYPE_DATETIME, $formatLength), $this->datesReader->getLocalizedLiteralsForLocale($locale), $strictMode);
 }
 /**
  * Formats dateTime with format string for date and time defined in CLDR for
  * particular locale.
  *
  * First date and time are formatted separately, and then dateTime format
  * from CLDR is used to place date and time in correct order.
  *
  * @param \DateTimeInterface $dateTime PHP object representing particular point in time
  * @param Locale $locale
  * @param string $formatLength One of DatesReader FORMAT_LENGTH constants
  * @return string Formatted date and time
  * @api
  */
 public function formatDateTime(\DateTimeInterface $dateTime, Locale $locale, $formatLength = DatesReader::FORMAT_LENGTH_DEFAULT)
 {
     DatesReader::validateFormatLength($formatLength);
     return $this->doFormattingWithParsedFormat($dateTime, $this->datesReader->parseFormatFromCldr($locale, DatesReader::FORMAT_TYPE_DATETIME, $formatLength), $this->datesReader->getLocalizedLiteralsForLocale($locale));
 }