#keywords 부팅,시간,윈도우 {{{#!gcode DWORD GetDateAbsSecond(SYSTEMTIME st) { INT64 i64; FILETIME fst; SystemTimeToFileTime(&st,&fst); i64 = (((INT64)fst.dwHighDateTime) << 32) + fst.dwLowDateTime; // 초 단위로 환산하고 2000년 1월 1일 자정 기준으로 바꾼다. i64 = i64 / 10000000 - (INT64)145731 * 86400; return (DWORD)i64; } void DateAbsSecondToSystemTime(DWORD Abs, SYSTEMTIME &st) { INT64 i64; FILETIME fst; i64 = (Abs + (INT64)145731 * 86400) * 10000000; fst.dwHighDateTime = (DWORD)(i64 >> 32); fst.dwLowDateTime = (DWORD)(i64 & 0xffffffff); FileTimeToSystemTime(&fst, &st); } SYSTEMTIME GetElapsedTimeSinceBoot() { SYSTEMTIME stRet = { 0, }; LARGE_INTEGER now, freq; // 부팅 후 경과한 시간을 초 단위로 구한다. QueryPerformanceCounter(&now); QueryPerformanceFrequency(&freq); UINT sec = (UINT)(now.QuadPart / freq.QuadPart); sec -= 86400 * (stRet.wDay = sec / 86400); sec -= 3600 * (stRet.wHour = sec / 3600); sec -= 60 * (stRet.wMinute = sec / 60); stRet.wSecond = (WORD)(sec); return stRet; } SYSTEMTIME GetBootTime() { SYSTEMTIME stCurrent = {0,}; SYSTEMTIME stBootElapsed = GetElapsedTimeSinceBoot(); SYSTEMTIME stRet = {0,}; DWORD abs = 0; // 현재 시간에서 경과 시간을 빼서 부팅한 시간을 구한다. GetLocalTime(&stCurrent); abs = GetDateAbsSecond(stCurrent); DateAbsSecondToSystemTime(abs - stBootElapsed.wSecond, stRet); return stRet; } }}} ---- {{{ SYSTEMTIME st = GetBootTime(); wsprintf(str, _T("부팅 시간: %d월 %d일 %d시 %d분"), st.wMonth, st.wDay, st.wHour, st.wMinute); -> 부팅 시간: 1월 22일 9시 53분 SYSTEMTIME st = GetElapsedTimeSinceBoot(); wsprintf(str, _T("경과 시간: %d일 %d시 %d분 %d초"), st.wDay, st.wHour, st.wMinute, st.wSecond % 60); -> 부팅 이후 경과 시간: 0일 0시 52분 5초 }}} See also: 윈도우 시작 이후 경과 시간 {{{#!gcode #include // winmm.lib timeGetTime(); }}} See also: {{{+1 프로세스 실행 시간 }}} {{{#!gcode // 현재 시간에서 프로세스 경과 시간을 빼서 프로세스 실행 시간을 구한다. static SYSTEMTIME stRunning = { 0, }; static double current_sec = 0; if (current_sec == 0) { clock_t current_tick = clock(); current_sec = current_tick / CLOCKS_PER_SEC; SYSTEMTIME stCurrent = { 0, }; DWORD abs = 0; GetLocalTime(&stCurrent); abs = GetDateAbsSecond(stCurrent); DateAbsSecondToSystemTime(abs - current_sec, stRunning); } }}} ---- {{{ stRunning.wYear, stRunning.wMonth, stRunning.wDay, stRunning.wHour, stRunning.wMinute, stRunning.wSecond }}}