code_app/modules/base/HGTime.cpp

86 lines
1.9 KiB
C++

#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;
}