public static function matchTime($time, $expr)
    {
        //ArgValidator::assert($time, array('string', 'numeric'));
        //ArgValidator::assert($expr, 'string');

        $cronExpr = preg_split('/\s+/', $expr, null, PREG_SPLIT_NO_EMPTY);
        if (count($cronExpr) !== 5) {
            throw new Exception\InvalidArgumentException(sprintf(
                    'cron expression should have exactly 5 arguments, "%s" given',
                    $expr
            ));
        }

        if (is_string($time)) $time = strtotime($time);

        $date = getdate($time);

        return self::matchTimeComponent($cronExpr[0], $date['minutes'])
        && self::matchTimeComponent($cronExpr[1], $date['hours'])
        && self::matchTimeComponent($cronExpr[2], $date['mday'])
        && self::matchTimeComponent($cronExpr[3], $date['mon'])
        && self::matchTimeComponent($cronExpr[4], $date['wday']);
    }