Заданная дата, получить день недели - SYSTEMTIME - PullRequest
7 голосов
/ 10 июня 2010

Можно ли определить день недели, используя SYSTEMTIME, если указана дата (месяц-день-год) или эта структура только односторонняя?

Какой самый простой способ выполнить то, что я спрашиваю, если SYSTEMTIME не может это сделать (используя Win32)?

Ответы [ 3 ]

18 голосов
/ 10 июня 2010

Согласно msdn , член wDayOfWeek игнорируется при преобразовании SYSTEMTIME в FILETIME. При обратном преобразовании он заполняется.

SYSTEMTIME t = { 2010, 6, -1 /*ignored*/, 11 };
FILETIME ft;
HRESULT hrto   = SystemTimeToFileTime( &t, &ft );
HRESULT hrback = FileTimeToSystemTime( &ft, &t );

WORD dayofweek = t.wDayOfWeek;
12 голосов
/ 10 июня 2010

Другой способ сделать это, который может быть немного более независимым от платформы, это использовать localtime или gmtime .

Например, напечатать текущий день недели:

struct tm *timeval;
time_t tt;
tt = time( NULL );
timeval = localtime( &tt );
// print zero based day of week
printf( "day of week = %d\n", timeval->tm_wday );
1 голос
/ 10 июня 2010

Используйте SystemTimeToFileTime, чтобы преобразовать SYSTEMTIME в FILETIME. Затем используйте FileTimeToSystemTime, чтобы преобразовать его в SYSTEMTIME с днем ​​недели.

...