将字符串转换为文件时间

时间:2011-02-13 08:09:04

标签: c++

转换表格字符串的最快方法是什么“”1997-01-08 03:04:01:463“ 到文件时间? 有没有这样做的功能?

3 个答案:

答案 0 :(得分:4)

我猜你在谈论一个Windows FILETIME,其中包含自1600年1月1日以来100纳秒的刻度数。

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

    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;
    }
    

答案 1 :(得分:1)

由于您提到了文件时间,我认为您引用了Windows,因为* nix不区分文件时间和系统时间,如Windows(FILETIMESYSTEMTIME)。不幸的是,在任何一种情况下你都运气不好,因为没有快捷方式将这样的字符串转换为Windows中的FILETIME结构或使用系统或标准C / C ++库调用的* nix中的time_t

为了获得幸运,你很可能必须使用包装库,例如。 Boost library provides such functionality

答案 2 :(得分:0)

假设您在Windows上,字符串看起来像SYSTEMTIME,并且有一个名为SystemTimeToFileTime http://msdn.microsoft.com/en-us/library/ms724948.aspx的例程将其转换为FILETIME。当然,你仍然需要自己处理标记化和整数解析。