VC++获取当前系统时间日期 GetSystemTime()函数的用法

VC++获取当前系统时间日期 GetSystemTime()函数的用法

     呵呵 获取时间 函数 每次都是一个 头疼的问题 , 写法也是 千变万化  等于我这总不记得一个函数用法的

 人 天天写程序 就是百度  所以效率 低 后来 发现如果 用过的东西 都记下来 该多好啊 。  这样 就好找多了

    来看看  vc 中 获取 系统时间 操作的 函数用法大全把 

[cpp]  view plain copy
  1. 一、使用MFC可以用以下代码得到:  
  2.   
  3.   
  4. CTime time = CTime::GetCurrentTime(); ///构造CTime对象  
  5.   
  6. int m_nYear = time.GetYear(); ///年  
  7.   
  8. int m_nMonth = time.GetMonth(); ///月  
  9.   
  10. int m_nDay = time.GetDay(); ///日  
  11.   
  12. int m_nHour = time.GetHour(); ///小时  
  13.   
  14. int m_nMinute = time.GetMinute(); ///分钟  
  15.   
  16. int m_nSecond = time.GetSecond(); ///秒  
  17.   
  18.   
  19.     // CTime time = CTime::GetCurrentTime();  
  20.   
  21. //CString strTime = time.Format("%Y-%m-%d %H:%M:%S"); //Format("%I:%M:%S %p, %A, %B %d, %Y")  
  22.   
  23. 我们还可以用CTime::Format函数将CTime对象转换为字符串对象  
  24.   
  25. 例如:  
  26.   
  27.   
  28. CString m_strTime = time.Format("%Y-%m-%d %H:%M:%S");  
  29.   
  30. 运行结果:m_strTime为 2001-8-1 12:11:05  
  31.   
  32. 函数GetSystemTime和GetLocalTime声明如下:  
  33.   
  34.   
  35. WINBASEAPI  
  36.   
  37. VOID  
  38.   
  39. WINAPI  
  40.   
  41. GetSystemTime(  
  42.   
  43.     __out LPSYSTEMTIME lpSystemTime  
  44.   
  45.     );  
  46.   
  47.      
  48.   
  49. WINBASEAPI  
  50.   
  51. VOID  
  52.   
  53. WINAPI  
  54.   
  55. GetLocalTime(  
  56.   
  57.     __out LPSYSTEMTIME lpSystemTime  
  58.   
  59.     );  
  60.   
  61.   
  62. lpSystemTime是获取系统时间的结构。  
  63.   
  64.   
  65. 调用函数的例子如下:  
  66.   
  67.   
  68. //获取系统时间。  
  69.   
  70. //蔡军生 2007/11/11 QQ:9073204 深圳  
  71.   
  72. void TestSystem(void)  
  73.   
  74. {  
  75.   
  76.          //获取系统的UTC时间。  
  77.   
  78.          SYSTEMTIME stUTC;  
  79.   
  80.         ::GetSystemTime(&stUTC);  
  81.   
  82.   
  83.          //显示时间的间隔。  
  84.   
  85.          const int nBufSize = 256;  
  86.   
  87.          TCHAR chBuf[nBufSize];  
  88.   
  89.          wsprintf(chBuf,_T("UTC: %u/%u/%u %u:%u:%u:%u %d\r\n"),              
  90.   
  91.                stUTC.wYear, stUTC.wMonth, stUTC.wDay,  
  92.   
  93.                stUTC.wHour, stUTC.wMinute, stUTC.wSecond,  
  94.   
  95.                stUTC.wMilliseconds,stUTC.wDayOfWeek);  
  96.   
  97.          OutputDebugString(chBuf);  
  98.   
  99.   
  100.   
  101.          //获取当地的时间。  
  102.   
  103.          SYSTEMTIME stLocal;  
  104.   
  105.         ::GetLocalTime(&stLocal);  
  106.   
  107.   
  108.          //显示时间的间隔。  
  109.   
  110.          wsprintf(chBuf,_T("Local: %u/%u/%u %u:%u:%u:%u %d\r\n"),                   
  111.   
  112.                stLocal.wYear, stLocal.wMonth, stLocal.wDay,  
  113.   
  114.                stLocal.wHour, stLocal.wMinute, stLocal.wSecond,  
  115.   
  116.                stLocal.wMilliseconds,stLocal.wDayOfWeek);  
  117.   
  118.          OutputDebugString(chBuf);  
  119.   
  120.   
  121. }  
  122.   
  123.   
  124.   
  125. 上面两个函数在我测试时输出的结果,如下:  
  126.   
  127. UTC: 2007/11/11 1:53:1:46 0  
  128.   
  129. Local: 2007/11/11 9:53:1:46 0  
  130.   
  131.   
  132. strTime.Format(_T("%d-%d-%d %d:%d:%d.%d "),stLocal.wYear,stLocal.wMonth,stLocal.wDay,stLocal.wHour,stLocal.wMinute,stLocal.wSecond,stLocal.wMilliseconds); //时间显示  

 

VC获取系统时间、程序运行时间

1.使用CTime类
CString str;
//获取系统时间
CTime tm;
tm=CTime::GetCurrentTime();
str=tm.Format("现在时间是%Y年%m月%d日 %X");
MessageBox(str,NULL,MB_OK);

2.得到系统时间日期(使用GetLocalTime)

SYSTEMTIME st;
CString strDate,strTime;
GetLocalTime(&st);
strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay);
strTime.Format("%2d:%2d:%2d",st.wHour,st.wMinute,st.wSecond) ;
AfxMessageBox(strDate);
AfxMessageBox(strTime);

3.使用GetTickCount

//获取程序运行时间
long t1=GetTickCount();//程序段开始前取得系统运行时间(ms)
Sleep(500);
long t2=GetTickCount();();//程序段结束后取得系统运行时间(ms)
str.Format("time:%dms",t2-t1);//前后之差即 程序运行时间
AfxMessageBox(str);
//获取系统运行时间
long t=GetTickCount();
CString str,str1;
str1.Format("系统已运行 %d时",t/3600000);
str=str1;
t%=3600000;
str1.Format("%d分",t/60000);
str+=str1;
t%=60000;
str1.Format("%d秒",t/1000);
str+=str1;
AfxMessageBox(str);


4.使用time_t time( time_t * timer )    精确到秒
  计算时间差使用double difftime( time_t timer1, time_t timer0

5.使用DWORD GetTickCount() 得到的是系统运行的时间 精确到毫秒

6.要获取高精度时间,可以使用
    BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)获取系统的计数器的频率
    BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)获取计数器的值
    然后用两次计数器的差除以Frequency就得到时间。

7.还有David的文章中提到的方法:
    Multimedia Timer Functions
    The following functions are used with multimedia timers.
    timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
    timeGetTime/timeKillEvent/TimeProc/timeSetEvent 精度很高 
Q:
GetTickCount()函数,说是毫秒记数,是真的吗,还是精确到55毫秒?
A:
GetTickCount()和GetCurrentTime()都只精确到55ms(1个tick就是55ms)。如果要精确到毫秒,应该使用timeGetTime函数或QueryPerformanceCounter函数。具体例子可以参考QA001022 "VC++中使用高精度定时器"、QA001813 "如何在Windows实现准确的定时"和QA004842 "timeGetTime函数延时不准"。
Q:
vc++怎样获取系统时间,返回值是什么类型的变量呢? 
A:
GetSystemTime返回的是格林威志标准时间 
VOID GetSystemTime( 
LPSYSTEMTIME lpSystemTime // address of system time structure 
); 
函数就可以获得了,其中LPSYSTEMTIME 是个结构体 
含:年,月,日,周几,小时,分,秒,毫秒。

posted @ 2016-01-25 16:50  SuperThinker  阅读(11)  评论(0编辑  收藏  举报  来源