#include "HGTime.h" #include "HGInc.h" HGResult HGAPI HGBase_GetLocalTime(HGTimeInfo* timeInfo) { if (NULL == timeInfo) { return HGBASE_ERR_INVALIDARG; } #if defined(HG_CMP_MSC) SYSTEMTIME st; GetLocalTime(&st); timeInfo->year = st.wYear; timeInfo->month = st.wMonth; timeInfo->day = st.wDay; timeInfo->dayOfWeek = st.wDayOfWeek; timeInfo->hour = st.wHour; timeInfo->minute = st.wMinute; timeInfo->second = st.wSecond; timeInfo->milliseconds = st.wMilliseconds; #else struct timeval time; gettimeofday(&time, NULL); struct tm* p = localtime(&time.tv_sec); assert(NULL != p); timeInfo->year = p->tm_year + 1900; timeInfo->month = 1 + p->tm_mon; timeInfo->day = p->tm_mday; timeInfo->dayOfWeek = p->tm_wday; timeInfo->hour = p->tm_hour; timeInfo->minute = p->tm_min; timeInfo->second = p->tm_sec; timeInfo->milliseconds = time.tv_usec / 1000; #endif return HGBASE_ERR_OK; } HGResult HGAPI HGBase_GetTickCount(HGULonglong* tickCount) { if (NULL == tickCount) { return HGBASE_ERR_INVALIDARG; } #if defined(HG_CMP_MSC) LARGE_INTEGER performanceCount; if (!QueryPerformanceCounter(&performanceCount)) { return HGBASE_ERR_FAIL; } *tickCount = performanceCount.QuadPart; #else struct timespec ts; if (0 != clock_gettime(CLOCK_MONOTONIC, &ts)) { return HGBASE_ERR_FAIL; } *tickCount = (HGULonglong)ts.tv_sec * (HGULonglong)1000000000 + (HGULonglong)ts.tv_nsec; #endif return HGBASE_ERR_OK; } HGResult HGAPI HGBase_GetIntervalSeconds(HGULonglong startTickCount, HGULonglong stopTickCount, HGDouble* seconds) { if (startTickCount > stopTickCount || NULL == seconds) { return HGBASE_ERR_INVALIDARG; } #if defined(HG_CMP_MSC) LARGE_INTEGER frequency; if (!QueryPerformanceFrequency(&frequency)) { return HGBASE_ERR_FAIL; } *seconds = (HGDouble)(stopTickCount - startTickCount) / (HGDouble)frequency.QuadPart; #else * seconds = (HGDouble)(stopTickCount - startTickCount) / (HGDouble)1000000000.0; #endif return HGBASE_ERR_OK; }