Ignoring AM abbreviation leads to wrong processing the 12th hour.

**Bug reproducing**
```sql
SELECT
    parseDateTimeBestEffort('2020-02-01 12:10:00 AM') AS am,
    parseDateTimeBestEffort('2020-02-01 12:10:00 PM') AS pm

┌──────────────────am─┬──────────────────pm─┐
│ 2020-02-01 12:10:00 │ 2020-02-01 12:10:00 │
└─────────────────────┴─────────────────────┘
```

**Expected behavior**
```sql
┌──────────────────am─┬──────────────────pm─┐
│ 2020-02-01 00:10:00 │ 2020-02-01 12:10:00 │
└─────────────────────┴─────────────────────┘
```
}
                else
                    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_pm && hour < 12)
        hour += 12;