VC++获取当前系统时间

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值