2010-06-10 10 views
7

Kann der Wochentag mithilfe von SYSTEMTIME bestimmt werden, wenn ein Datum (Monat-Tag-Jahr) angegeben wird oder ist diese Struktur nur in eine Richtung?Gegebenes Datum, Wochentag abrufen - SYSTEMTIME

Was ist der leichteste Weg zu erreichen, was ich frage, wenn SYSTEMTIME es nicht kann (mit Win32)?

Antwort

18

Gemäß der msdn wird das Element wDayOfWeek ignoriert, wenn SYSTEMTIME in FILETIME konvertiert wird. Bei der Konvertierung zurück, es ausgefüllt.

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

WORD dayofweek = t.wDayOfWeek; 
1

Verwenden SystemTimeToFileTime das SYSTEM zu einem FILE verdeckte. Dann benutze FileTimeToSystemTimeto, um es zu einem SYSTEMTIME mit Wochentag zu konvertieren.

12

Eine andere Möglichkeit, die etwas plattformunabhängiger sein könnte, wäre localtime oder gmtime.

Zum Beispiel drucken aktuellen Tag der Woche:

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); 
+0

Vielen Dank für Ihre Antwort Mark –