윈도우가 지원하는 시간포맷중 하나.
1000만분의 1초단위(100나노초)로 표현되며 1601년 1월 1일 을 기준으로 경과한 시간이다.
1초 = 1,000밀리초 = 1,000,000 마이크로초 = 100 나노초(1/10,000,000 초)
typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME, *PFILETIME;
상,하위 32비트 값으로 구성되어있다.(64비트의 정수가 없던시절;;)
FILETIME 구조체로 현제 시간을 가져오는 함수. 이 함수는 UTC(GMT) 시간을 가져온다.
void WINAPI GetSystemTimeAsFileTime(
_Out_ LPFILETIME lpSystemTimeAsFileTime
);
그런데 time_t 나 timeval 같은 유닉스 시간은 1970년 1월 1일을 기준으로 하고있어 시간 호환이 안된다.
1970년 1월 1일 기준의 유닉스시간 microseconds 로 변환하는 코드.를 작성
u_int64 filetime_to_microseconds(const FILETIME& ft) { // FILETIME 은 1601-Jan-01 기준으로 10,000,000 분의 1초(100 나노초) 로 기록됨 union { FILETIME asFileTime ; u_int64 asInt64 ; } myFileTime; myFileTime.asFileTime = ft; myFileTime.asInt64 -= 116444736000000000ULL; // 1970-Jan-01 기준 으로 변환 return (myFileTime.asInt64 / 10); // microseconds 로 변환 }
'프로그래밍' 카테고리의 다른 글
Boost::asio – Overview – Rationale (0) | 2013.05.24 |
---|---|
Herb Sutter: (Not Your Father’s) C++ (0) | 2013.05.23 |
TCP 상태 변화 (TCP States) (0) | 2013.04.01 |
gtest 사용하기 (0) | 2012.12.06 |
FormatMessage (Win32) (0) | 2012.12.05 |