项目中需要获取毫秒级时间,本想偷个懒,直接在网上搜了个代码如下:
long getCurrentTime()
{
struct timeval tv;
gettimeofday(&tv,NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
在手机上运行总是得到负的值,经过查错和进行小小的修改 (long类型和long long类型):
long long GetCurrentTime()
{
struct cc_timeval tv;
CCTime::gettimeofdayCocos2d(&tv, NULL);
long long millSecond = ((long long)tv.tv_sec) * 1000L + tv.tv_usec / 1000L;
return millSecond;
}
能够得到正确的值,究其原因 获取毫秒级时间 long类型的位数不够,需要更大的数需要用long long类型。
C99标准扩展了新的整数类型 long long,long是32位宽,占4个字节,long long 是64 位宽,在32位机器上可以扩展8字节的数据,GUN C也支持。
顺便附上取年月日时间字串的函数:(注意:Cocos2dx中的年是从1900年开始的)
(特别提示以下代码win32下的内容只是写了,没实际验证过哦,需要引用的同学需要自己验证)
string GetCurrentDateTime()
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
struct cc_timeval now;
CCTime::gettimeofdayCocos2d(&now, NULL);
struct tm *tm;
time_t tp = now.tv_sec;
tm = localtime(&tp);
char time[64] = { 0 };
sprintf(time, "%d-%02d-%02d %02d:%02d:%02d", (int) tm->tm_year + 1900,
(int) tm->tm_mon + 1, (int) tm->tm_mday, (int) tm->tm_hour,
(int) tm->tm_min, (int) tm->tm_sec);
return string(time);
#elif ( CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 )
struct tm *tm;
time_t timep;
time(&timep);
tm = localtime(&timep);
char time[64] = { 0 };
sprintf(time, "%d-%02d-%02d %02d:%02d:%02d", (int) tm->tm_year + 1900,
(int) tm->tm_mon + 1, (int) tm->tm_mday, (int) tm->tm_hour,
(int) tm->tm_min, (int) tm->tm_sec);
return string(time);
#endif
}