1#pragma once 2 3//http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/430449b3-f6dd-4e18-84de-eebd26a8d668 4 5#include <time.h> 6#include <winsock2.h> 7 8#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) 9 #define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 10#else 11 #define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL 12#endif 13 14struct timespec { 15 16time_t tv_sec; /* Seconds since 00:00:00 GMT, */ 17 18/* 1 January 1970 */ 19 20long tv_nsec; /* Additional nanoseconds since */ 21 22/* tv_sec */ 23 24}; 25 26struct timezone 27{ 28 int tz_minuteswest; /* minutes W of Greenwich */ 29 int tz_dsttime; /* type of dst correction */ 30}; 31 32static __inline int gettimeofday(struct timeval *tv, struct timezone *tz) 33{ 34 FILETIME ft; 35 unsigned __int64 tmpres = 0; 36 static int tzflag; 37 38 if (NULL != tv) 39 { 40 GetSystemTimeAsFileTime(&ft); 41 42 tmpres |= ft.dwHighDateTime; 43 tmpres <<= 32; 44 tmpres |= ft.dwLowDateTime; 45 46 /*converting file time to unix epoch*/ 47 tmpres -= DELTA_EPOCH_IN_MICROSECS; 48 tv->tv_sec = (long)(tmpres / 1000000UL); 49 tv->tv_usec = (long)(tmpres % 1000000UL); 50 } 51 52 if (NULL != tz) 53 { 54 if (!tzflag) 55 { 56 _tzset(); 57 tzflag++; 58 } 59 tz->tz_minuteswest = _timezone / 60; 60 tz->tz_dsttime = _daylight; 61 } 62 63 return 0; 64}