Last active
March 17, 2024 00:30
-
-
Save ugovaretto/5875385 to your computer and use it in GitHub Desktop.
gettimeofday implementaiton for windows
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Author: Ugo Varetto - [email protected] | |
* This code is distributed under the terms of the Apache Software License version 2.0 | |
* https://opensource.org/licenses/Apache-2.0 | |
*/ | |
#include < time.h > | |
#include < windows.h > | |
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) | |
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 | |
#else | |
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL | |
#endif | |
struct timezone | |
{ | |
int tz_minuteswest; /* minutes W of Greenwich */ | |
int tz_dsttime; /* type of dst correction */ | |
}; | |
int gettimeofday(struct timeval *tv, struct timezone *tz) | |
{ | |
FILETIME ft; | |
unsigned __int64 tmpres = 0; | |
static int tzflag = 0; | |
if (NULL != tv) | |
{ | |
GetSystemTimeAsFileTime(&ft); | |
tmpres |= ft.dwHighDateTime; | |
tmpres <<= 32; | |
tmpres |= ft.dwLowDateTime; | |
tmpres /= 10; /*convert into microseconds*/ | |
/*converting file time to unix epoch*/ | |
tmpres -= DELTA_EPOCH_IN_MICROSECS; | |
tv->tv_sec = (long)(tmpres / 1000000UL); | |
tv->tv_usec = (long)(tmpres % 1000000UL); | |
} | |
if (NULL != tz) | |
{ | |
if (!tzflag) | |
{ | |
_tzset(); | |
tzflag++; | |
} | |
tz->tz_minuteswest = _timezone / 60; | |
tz->tz_dsttime = _daylight; | |
} | |
return 0; | |
} | |
#define TEST | |
#ifdef TEST | |
int main() | |
{ | |
struct timeval now; | |
struct timezone tzone; | |
gettimeofday(&now, NULL); | |
gettimeofday(&now, &tzone); | |
} | |
#endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
thanks ugovaretto