Я пытаюсь разобрать строку в struct tm, используя strptime. Выглядит достаточно просто, но он не заполняет год правильно (да, я знаю о сдвиге 1900) - после вызова год устанавливается в 0. Другие поля выглядят нормально. Смотрите ниже:C++ strptime не заполняется в году
struct tm tm;
memset(&tm, 0, sizeof(struct tm));
strptime("Fri Jan 17 09:44:33 UTC 2014", "%a %b %d %H:%M:%S %Z %Y", &tm);
После вызова strptime ТМ структура выглядит следующим образом - обратите внимание, что tm_year = 0, где я ожидал, что это будет 114:
{tm_sec = 33, tm_min = 44, tm_hour = 9, tm_mday = 17, tm_mon = 0, tm_year = 0,
tm_wday = 5, tm_yday = 0, tm_isdst = 0, tm_gmtoff = 0, tm_zone = 0x0}
Я уверен, что я m пропустить что-то простое - может ли кто-нибудь указать мне на это?
Я бы предположил, что он пытается сопоставить всю строку в% Z – PlasmaHH
Он работает в Python, хотя и не в C++: '>>> datetime.datetime.strptime (" Пт Янв 17 09:44:33 UTC 2014 " , "% a% b% d% H:% M:% S% Z% Y") datetime.datetime (2014, 1, 17, 9, 44, 33) ' –
Да, вот и все. Если я удалю% Z и использую следующую строку форматирования, я получу год правильно: «% a% b% d% H:% M:% S UTC% Y». Поскольку я знаю, что все время будет в UTC, я могу уйти с этим, хотя и не изящным. Я мог бы попробовать sscanf-подход ... – dcdunne