转换形式为““1997-01-08 03:04:01:463”的字符串的最快方法是什么
到文件时间?
有功能吗?

最佳答案

我猜您正在谈论Windows FILETIME,其中包含自1/1/1600以来的100纳秒刻度。

  • 使用sscanf()或std::istringstream将字符串解析为其组件。
    并填充SYSTEMTIME结构
  • 使用SystemTimeToFileTime()转换为FILETIME

  • 例如
    FILETIME DecodeTime(const std::string &sTime)
    {
        std::istringstream istr(sTime);
        SYSTEMTIME st = { 0 };
        FILETIME ft = { 0 };
    
        istr >> st.wYear;
        istr.ignore(1, '-');
        istr >> st.wMonth;
        istr.ignore(1, '-');
        istr >> st.wDay;
        istr.ignore(1, ' ');
        istr >> st.wHour;
        istr.ignore(1, ':');
        istr >> st.wMinute;
        istr.ignore(1, ':');
        istr >> st.wSecond;
        istr.ignore(1, '.');
        istr >> st.wMilliseconds;
    
        // Do validation that istr has no errors and all fields
        // are in sensible ranges
        // ...
    
        ::SystemTimeToFileTime(&st, &ft);
        return ft;
    }
    
    int main(int argc, char* argv[])
    {
        FILETIME ft = DecodeTime("1997-01-08 03:04:01.463");
        return 0;
    }
    

    10-08 00:33