**Describe the issue**
```
milovidov-desktop :) SELECT parseDateTimeBestEffort('20220101-010203')

SELECT parseDateTimeBestEffort('20220101-010203')


0 rows in set. Elapsed: 0.153 sec. 

Received exception:
Code: 41. DB::Exception: Cannot read DateTime: unexpected number of decimal digits for time zone offset: 6: While processing parseDateTimeBestEffort('20220101-010203'). (CANNOT_PARSE_DATETIME)
```
return on_error("Cannot read DateTime: logical error, unexpected branch in code", ErrorCodes::LOGICAL_ERROR);
            }
        }
    }
    
    if (!year && !month && !day_of_month && !has_time)
        return on_error("Cannot read DateTime: neither Date nor Time was parsed successfully", ErrorCodes::CANNOT_PARSE_DATETIME);
    if (!year)
        year = 2000;
    if (!month)
        month = 1;
    if (!day_of_month)
        day_of_month = 1;
    auto is_leap_year = (year % 400 == 0) || (year % 100 != 0 && year % 4 == 0);
    auto check_date = [](const auto & is_leap_year_, const auto & month_, const auto & day_)
    {
        if ((month_ == 1 || month_ == 3 || month_ == 5 || month_ == 7 || month_ == 8 || month_ == 10 || month_ == 12) && day_ >= 1 && day_ <= 31)
            return true;
        else if (month_ == 2 && ((is_leap_year_ && day_ >= 1 && day_ <= 29) || (!is_leap_year_ && day_ >= 1 && day_ <= 28)))
            return true;
        else if ((month_ == 4 || month_ == 6 || month_ == 9 || month_ == 11) && day_ >= 1 && day_ <= 30)
            return true;
        return false;
    };
    if (!check_date(is_leap_year, month, day_of_month))
        return on_error("Cannot read DateTime: unexpected date: " + std::to_string(year) + "-" + std::to_string(month) + "-" + std::to_string(day_of_month), ErrorCodes::CANNOT_PARSE_DATETIME);
    if (is_am && hour == 12)
        hour = 0;
    if (is_pm && hour < 12)
        hour += 12;