/**
  * Internal _createFromFormat implementation for 5.2
  * @internal
  * @param string $format Format like in date()
  * @param string $time Time string to parse
  * @param DateTimeZone $timezone TZ
  * @return SugarDateTime
  * @see DateTime::createFromFormat
  */
 protected static function _createFromFormat($format, $time, DateTimeZone $timezone = null)
 {
     $res = new self();
     if (!empty($timezone)) {
         $res->setTimezone($timezone);
     }
     if (self::$use_strptime && function_exists("strptime")) {
         $str_format = str_replace(array_keys(TimeDate::$format_to_str), array_values(TimeDate::$format_to_str), $format);
         // for a reason unknown to modern science, %P doesn't work in strptime
         $str_format = str_replace("%P", "%p", $str_format);
         // strip spaces before am/pm as our formats don't have them
         $time = preg_replace('/\\s+(AM|PM)/i', '\\1', $time);
         // TODO: better way to not risk locale stuff problems?
         $data = strptime($time, $str_format);
         if (empty($data)) {
             $GLOBALS['log']->error("Cannot parse {$time} for format {$format}");
             return null;
         }
         if ($data["tm_year"] == 0) {
             unset($data["tm_year"]);
         }
         if ($data["tm_mday"] == 0) {
             unset($data["tm_mday"]);
         }
         if (isset($data["tm_year"])) {
             $data["tm_year"] += 1900;
         }
         if (isset($data["tm_mon"])) {
             $data["tm_mon"]++;
         }
         $data += self::$data_init;
         // fill in missing parts
     } else {
         // Windows, etc. might not have strptime - we'd have to work harder here
         $data = $res->_strptime($time, $format);
     }
     if (empty($data)) {
         $GLOBALS['log']->error("Cannot parse {$time} for format {$format}");
         return null;
     }
     if (isset($data["tm_year"])) {
         $res->setDate($data["tm_year"], $data["tm_mon"], $data["tm_mday"]);
     }
     $res->setTime($data["tm_hour"], $data["tm_min"], $data["tm_sec"]);
     return $res;
 }