Я использую VS2010 Этот код компилируется как ANSI C Projectне указываете ей обновить STRUCT тм
int C90Clockadapter_GetCW_ISO8601(const C90Clockadapter * clockadapter, int * calendarweek)
{
int e = 0;
struct tm tm;
char timebuf[64];
memset(&tm, 0, sizeof(tm));
tm.tm_mday = clockadapter->mDay;
tm.tm_mon = clockadapter->mMonth;
tm.tm_year = clockadapter->mYear;
mktime(&tm);
if (0 != strftime(timebuf,sizeof(timebuf),"%W", &tm)) //i know %W is not ISO8601
{
*calendarweek = atoi(timebuf);
}
else
{
e |= 1;
}
return e;
}
как-то mktime(&tm)
не изменяет состояние tm
. Такое поведение полностью не соответствует моим ожиданиям.
Я написал несколько UnitTests, которые имеют чувство собственного объясняющую выход:
4.1.1971 - expected CW 1 but was CW 0
31.12.1992 - expected CW 53 but was CW 0
Что случилось с моим кодом - или есть некоторые специальности в окнах или с VS2010 и ANSI-C, что мне не хватает?