searchd.cpp
/// format current timestamp for logging int sphFormatCurrentTime ( char * sTimeBuf, int iBufLen ) { #if !USE_WINDOWS struct timeval tv; gettimeofday ( &tv, NULL ); struct tm tmp; time_t ts = (time_t) tv.tv_sec; // on some systems (eg. FreeBSD 6.2), tv.tv_sec has another type and we can't just pass it localtime_r ( &ts, &tmp ); #else struct { time_t tv_sec; DWORD tv_usec; } tv; FILETIME ft; GetSystemTimeAsFileTime ( &ft ); uint64_t ts = ( uint64_t(ft.dwHighDateTime)<<32 ) + uint64_t(ft.dwLowDateTime) - 116444736000000000ULL; // Jan 1, 1970 magic ts /= 10; // to microseconds tv.tv_sec = (DWORD)(ts/1000000); tv.tv_usec = (DWORD)(ts%1000000); struct tm tmp; tmp = *localtime ( &tv.tv_sec ); #endif static const char * sWeekday[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; static const char * sMonth[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; /* //eg: Wed Aug 13 13:53:05.491 2014 return snprintf ( sTimeBuf, iBufLen, "%.3s %.3s%3d %.2d:%.2d:%.2d.%.3d %d", sWeekday [ tmp.tm_wday ], sMonth [ tmp.tm_mon ], tmp.tm_mday, tmp.tm_hour, tmp.tm_min, tmp.tm_sec, (int)(tv.tv_usec/1000), 1900+tmp.tm_year ); */ //eg: 2014-08-13 13:53:18.988 return snprintf ( sTimeBuf, iBufLen, "%4d-%.2d-%.2d %.2d:%.2d:%.2d.%.3d", 1900+tmp.tm_year, 1+tmp.tm_mon, tmp.tm_mday, tmp.tm_hour, tmp.tm_min, tmp.tm_sec, (int)(tv.tv_usec/1000)); }