CPP > gettimeofday
Redjini WiKi
< cpp(cpp/win32/gettimeofday에서 넘어옴)
1970년 1월 1일 부터 현재 까지 시간 구하기
마이크로초 단위의 시간 까지 확인 가능.
Linux
#include <sys/time.h>
#include <unistd.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
struct timeval {
long tv_sec; // 초
long tv_usec; // 마이크로초
};
struct timezone {
int tz_minuteswest; // 시차(minutes)
int tz_dsttime; // DST 보정 타입 , DST_NONE : DST 사용하지 않음
};
Win32
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
#define DELTA_EPOCH_IN_MICROSECS 116444736000000000Ui64
// 1164447360010000000
#else
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL
#endif
// for timezone
struct timezone{
int tz_minuteswest; //- minutes W of Greenwich *-
int tz_dsttime; //- type of dst correction *-
};
// gettimeofday in windows
int gettimeofday(struct timeval *tv, struct timezone *tz){
FILETIME ft;
ULARGE_INTEGER ull = {0, 0};
static int tzflag = 0;
time_t ttttt = time(NULL);
if (NULL != tv){
// system time을 구하기
GetSystemTimeAsFileTime(&ft);
//time_t tf = FILEFileTimeToUnixTime(ft, NULL);
ull.HighPart = ft.dwHighDateTime;
ull.LowPart = ft.dwLowDateTime;
// UNIX TIME으로 변환하기
ull.QuadPart-= DELTA_EPOCH_IN_MICROSECS;
// 100 nano -> 1micro로 변환하기
ull.QuadPart/= 10;
tv->tv_sec = (LONG)((ull.QuadPart / 1000000UL));
tv->tv_usec= (LONG)((ull.QuadPart % 1000000UL));
}
// timezone 처리
if (NULL != tz){
LONG nTimezone = 0;
INT nDaylight = 0;
if (!tzflag){
_tzset();
tzflag++;
}
_get_timezone(&nTimezone);
_get_daylight(&nDaylight);
tz->tz_minuteswest = nTimezone;
tz->tz_dsttime = nDaylight;
}
return 0;
}
반환값
성공 : 0, 실패 : -1