- 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:
윈도우 시작 이후 경과 시간
윈도우 시작 이후 경과 시간
- #include <mmsystem.h>
- // winmm.lib
- timeGetTime();
See also:
프로세스 실행 시간
프로세스 실행 시간
- // 현재 시간에서 프로세스 경과 시간을 빼서 프로세스 실행 시간을 구한다.
- 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