我试图找出为什么我不能在{+ 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"
答案 0 :(得分:1)
答案 1 :(得分:1)
你是strftime
has a %F
specifier since C99 and C++11。
但是,std::get_time
与strptime
(在某种意义上,相反的功能)有关,doesn't。
下次您不确定时,请查看文档。