void DateTime::ConvertTimestampStringToTimePoint()

in src/aws-cpp-sdk-core/source/utils/DateTimeCommon.cpp [1418:1503]


void DateTime::ConvertTimestampStringToTimePoint(const char* timestamp, DateFormat format)
{
    std::tm timeStruct;
    bool isUtc = true;

    switch (format)
    {
    case DateFormat::RFC822:
    {
        RFC822DateParser parser(timestamp);
        parser.Parse();
        m_valid = parser.WasParseSuccessful();
        isUtc = parser.ShouldIAssumeThisIsUTC();
        timeStruct = parser.GetParsedTimestamp();
        break;
    }
    case DateFormat::ISO_8601:
    {
        ISO_8601DateParser parser(timestamp);
        parser.Parse();
        m_valid = parser.WasParseSuccessful();
        isUtc = parser.ShouldIAssumeThisIsUTC();
        timeStruct = parser.GetParsedTimestamp();
        break;
    }
    case DateFormat::ISO_8601_BASIC:
    {
        ISO_8601BasicDateParser parser(timestamp);
        parser.Parse();
        m_valid = parser.WasParseSuccessful();
        isUtc = parser.ShouldIAssumeThisIsUTC();
        timeStruct = parser.GetParsedTimestamp();
        break;
    }
    case DateFormat::AutoDetect:
    {
        RFC822DateParser rfcParser(timestamp);
        rfcParser.Parse();
        if(rfcParser.WasParseSuccessful())
        {
            m_valid = true;
            isUtc = rfcParser.ShouldIAssumeThisIsUTC();
            timeStruct = rfcParser.GetParsedTimestamp();
            break;
        }
        ISO_8601DateParser isoParser(timestamp);
        isoParser.Parse();
        if (isoParser.WasParseSuccessful())
        {
            m_valid = true;
            isUtc = isoParser.ShouldIAssumeThisIsUTC();
            timeStruct = isoParser.GetParsedTimestamp();
            break;
        }
        ISO_8601BasicDateParser isoBasicParser(timestamp);
        isoBasicParser.Parse();
        if (isoBasicParser.WasParseSuccessful())
        {
            m_valid = true;
            isUtc = isoBasicParser.ShouldIAssumeThisIsUTC();
            timeStruct = isoBasicParser.GetParsedTimestamp();
            break;
        }
        m_valid = false;
        break;
    }
    default:
        assert(0);
    }

    if (m_valid)
    {
        std::time_t tt;
        if(isUtc)
        {
            tt = Aws::Time::TimeGM(&timeStruct);
        }
        else
        {
            assert(0);
            AWS_LOGSTREAM_WARN(CLASS_TAG, "Non-UTC timestamp detected. This is always a bug. Make the world a better place and fix whatever sent you this timestamp: " << timestamp)
            tt = std::mktime(&timeStruct);
        }
        m_time = std::chrono::system_clock::from_time_t(tt);
    }
}