年月日时间和64位时间的使用及相互相转换
(2011-10-16 23:48:27)
标签:
杂谈 |
通常在我们的VC程序中,界面上要显示年月日类型的时间,而将对应的64位类型的时间存储到数据库中,数据库中对应的时间字段的类型则为big int数据类型。代码中会涉及到如何获取当前时间,以及年月日时间和64位时间之间的转换问题。下面就自己遇到的实际情况,做一个小的总结。
1. 获取当前时间
(1)使用time函数获取当前时间
- __time64_t
curTime = ::time(NULL);
(i)在客户端的一个线程中,一方面要定时地给服务器发送心跳包数据(假如每隔10秒),另一方面又要进行其他的数据收发工作,而这些数据又要实时 的的收发,所以在该线程中不能等待10秒钟后发送心跳包,然后再收发其他的数据,这个时候我们就可以定义一个__time64_t类型的时间变量,记录最 后一次发送心跳包的时间,这样在线程函数的循环中,每次循环只需要等待一个微小的时间就进入下一次循环,在实时收发数据的同时判断当前时间离最后一次发心 跳包的时间间隔是否已经到达10秒,若到达则发送新的心跳包,并更新最后一次心跳包发送的时间。
(ii)在视频监控系统中,有计划录像的概念,那录像的计划是如何实现的呢?是如何进行调度的呢?这里就简要的说明一下,开启一个录像调度的线程, 在该线程中遍历录像对象列表,对象中包含录像计划的开始时间和结束时间,当当前时间大于或等于开始录像时间时,就开始录像,当当前时间大于或等于结束录像 时间时,就结束录像。
(2)使用CTime类获取当前时间
-
CTime
curTime; -
curTime
= CTime::GetCurrentTime(); -
CString
strCurTime; - strCurTime.Format(_T("d/d/d
d:d:d" ),curTime.GetYear(), curTime.GetMonth(), curTime.GetDay(), curTime.GetHour(), curTime.GetMinute(), curTime.GetSecond()); - ......//将时间显示出来
(3)使用SYSTEMTIME结构体获取当前时间
-
SYSTEMTIME
curTime; -
GetLocalTime(&curTime);
-
CString
strCurTime; - strCurTime.Format(_T("d/d/d
d:d:d" ),curTime.wYear, curTime.wMonth, curTime.wDay, curTime.wHour, curTime.wMinute, curTime.wSecond); - ......//将当前时间显示出来
2. 年月日时间和64位时间的相互转化
(1)使用CTime类实现年月日时间和64位时间的相互转化
(i)年月日时间转化为64位时间: 构造CTime类对象时,将年月日信息作为构造参数。
-
CTime
thatTime(2010, 10, 06, 19, 22, 55); - __time64_t
thatTime_64t = thatTime.GetTime();
(ii)64位时间转化为年月日时间: 构造CTime类对象时,将64位时间作为构造参数。
- __time64_t
tahtTime; - ......//中间处理,获取64位时间
-
CTime
ctThatTime(tahtTime); -
CString
strThatTime; - strThatTime.Format(_T("d/d/d
d:d:d" ),ctThatTime.GetYear(), ctThatTime.GetMonth(), ctThatTime.GetDay(), ctThatTime.GetHour(), ctThatTime.GetMinute(), ctThatTime.GetSecond()); -
......
(2)使用tm结构体实现年月日时间和64位时间的相互转化
(i)年月日时间转化为64位时间: 首先使用SYSTEMTIME结构体来获取当前的时间,然后利用tm结构体将获得年月日时间转化为64位时间。
-
SYSTEMTIME
curTime; -
GetLocalTime(&curTime);
- struct
tm tmTime; -
tmTime.tm_year
= curTime.wYear - 1900; -
tmTime.tm_month
= curTime.wMonth; -
tmTime.tm_day
= curTime.wDay; -
tmTime.tm_hour
= curTime.wHour; -
tmTime.tm_minute
= curTime.wMinute; -
tmTime.tm_second
= curTime.wSecond; - __time64_t
curTime_64t = _mktime64(&tmTime);
(ii)64位时间转化为年月日时间: 首先将64位时间转化为tm结构体时间,然后再转化成年月日时间。
- __time64_t
tahtTime; - ......//获取64位时间
- tm
*tmThatTime = _localtime64(&thatTime); - char
cThatTime[30]; -
memset(cThatTime,
0, 30); - sprintf(cThatTime,
"d/d/d d:d:d" ,tmThatTime->tm_year+1900, tmThatTime->tm_month+1, tmThatTime->tm_day, tmThatTime->tm_hour, tmThatTime->tm_minute, tmThatTime->tm_second); -
......

加载中…