不能将%F与std :: get_time()一起使用

时间:2018-03-27 15:43:32

标签: c++

我试图找出为什么我不能在{+ 1}}格式说明符中使用std::get_time()。它在clang 3.8.0或gcc 5.4.0中对我不起作用。我的印象是%F %F格式说明符是C ++ 11标准的一部分,strftime()使用std::get_time()格式说明符?我不正确,或者我的代码有问题吗?

strftime()

这是输出。正如您所看到的,#include <cstdio> // printf() #include <ctime> // std::tm #include <cstring> // memcpy() #include <sstream> // std::istringstream #include <iomanip> // std::get_time() void print(const std::istringstream& iss, const struct tm& time_struct) { if(! iss.fail()) { printf("struct tm {\n" " tm_sec = %d\n" " tm_min = %d\n" " tm_hour = %d\n" " tm_mday = %d\n" " tm_mon = %d\n" " tm_year = %d\n" " tm_wday = %d\n" " tm_yday = %d\n" " tm_isdst = %d\n" "}\n", time_struct.tm_sec, time_struct.tm_min, time_struct.tm_hour, time_struct.tm_mday, time_struct.tm_mon, time_struct.tm_year, time_struct.tm_wday, time_struct.tm_yday, time_struct.tm_isdst); } else printf("failed to parse\n"); } int main(int argc, char** argv) { struct tm time_struct; std::istringstream iss(argv[1]); memset(&time_struct, 0, sizeof(struct tm)); iss >> std::get_time(&time_struct, "%Y-%m-%d"); print(iss, time_struct); std::istringstream iss2(argv[1]); memset(&time_struct, 0, sizeof(struct tm)); iss2 >> std::get_time(&time_struct, "%F"); print(iss2, time_struct); return 0; } 格式按预期工作,但所谓的等效"%Y-%m-%d"没有(它无法解析)。

"%F"

2 个答案:

答案 0 :(得分:1)

根据http://en.cppreference.com/w/cpp/io/manip/get_time

  

格式说明符与POSIX函数strptime()

匹配

Which%F说明符没有任何说明。

答案 1 :(得分:1)

你是strftime has a %F specifier since C99 and C++11

但是,std::get_timestrptime(在某种意义上,相反的功能)有关,doesn't

下次您不确定时,请查看文档。