您的位置:首页 > 编程语言 > C语言/C++

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

2016-07-16 12:14 821 查看
VC++获取当前系统时间日期 GetSystemTime()函数的用法

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

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

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

[cpp] view
plain copy

一、使用MFC可以用以下代码得到:  

  

  

CTime time = CTime::GetCurrentTime(); ///构造CTime对象  

  

int m_nYear = time.GetYear(); ///年  

  

int m_nMonth = time.GetMonth(); ///月  

  

int m_nDay = time.GetDay(); ///日  

  

int m_nHour = time.GetHour(); ///小时  

  

int m_nMinute = time.GetMinute(); ///分钟  

  

int m_nSecond = time.GetSecond(); ///秒  

  

  

    // CTime time = CTime::GetCurrentTime();  

  

//CString strTime = time.Format("%Y-%m-%d %H:%M:%S"); //Format("%I:%M:%S %p, %A, %B %d, %Y")  

  

我们还可以用CTime::Format函数将CTime对象转换为字符串对象  

  

例如:  

  

  

CString m_strTime = time.Format("%Y-%m-%d %H:%M:%S");  

  

运行结果:m_strTime为 2001-8-1 12:11:05  

  

函数GetSystemTime和GetLocalTime声明如下:  

  

  

WINBASEAPI  

  

VOID  

  

WINAPI  

  

GetSystemTime(  

  

    __out LPSYSTEMTIME lpSystemTime  

  

    );  

  

     

  

WINBASEAPI  

  

VOID  

  

WINAPI  

  

GetLocalTime(  

  

    __out LPSYSTEMTIME lpSystemTime  

  

    );  

  

  

lpSystemTime是获取系统时间的结构。  

  

  

调用函数的例子如下:  

  

  

//获取系统时间。  

  

//蔡军生 2007/11/11 QQ:9073204 深圳  

  

void TestSystem(void)  

  

{  

  

         //获取系统的UTC时间。  

  

         SYSTEMTIME stUTC;  

  

        ::GetSystemTime(&stUTC);  

  

  

         //显示时间的间隔。  

  

         const int nBufSize = 256;  

  

         TCHAR chBuf[nBufSize];  

  

         wsprintf(chBuf,_T("UTC: %u/%u/%u %u:%u:%u:%u %d\r\n"),              

  

               stUTC.wYear, stUTC.wMonth, stUTC.wDay,  

  

               stUTC.wHour, stUTC.wMinute, stUTC.wSecond,  

  

               stUTC.wMilliseconds,stUTC.wDayOfWeek);  

  

         OutputDebugString(chBuf);  

  

  

  

         //获取当地的时间。  

  

         SYSTEMTIME stLocal;  

  

        ::GetLocalTime(&stLocal);  

  

  

         //显示时间的间隔。  

  

         wsprintf(chBuf,_T("Local: %u/%u/%u %u:%u:%u:%u %d\r\n"),                   

  

               stLocal.wYear, stLocal.wMonth, stLocal.wDay,  

  

               stLocal.wHour, stLocal.wMinute, stLocal.wSecond,  

  

               stLocal.wMilliseconds,stLocal.wDayOfWeek);  

  

         OutputDebugString(chBuf);  

  

  

}  

  

  

  

上面两个函数在我测试时输出的结果,如下:  

  

UTC: 2007/11/11 1:53:1:46 0  

  

Local: 2007/11/11 9:53:1:46 0  

  

  

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 是个结构体 

含:年,月,日,周几,小时,分,秒,毫秒。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: