VC-基础:VC中得到当前系统的时间和日期

得到当前时间的方法一般都是得到从1900年0点0分到现在的秒数,然后转为年月日时分秒的形式得到当前的时间(时分秒)。主要方法如下:

1)使用CRT函数

C++代码  
1 char szCurrentDateTime[32];     
2 time_t nowtime;     
3 struct tm* ptm;     
4 time(&nowtime);     
5 ptm = localtime(&nowtime);     
6 sprintf(szCurrentDateTime, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d",     
7     ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday,     
8     ptm->tm_hour, ptm->tm_min, ptm->tm_sec);     

 

2)使用SYSTEMTIME

C++代码  
1 char szCurrentDateTime[32];     
2 SYSTEMTIME systm;     
3 GetLocalTime(&systm);     
4 sprintf(szCurrentDateTime, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d",     
5         systm.wYear, systm.wMonth, systm.wDay,     
6         systm.wHour, systm.wMinute, systm.wSecond);     

 

3)使用CTime

C++代码  
1 char szCurrentDateTime[32];     
2 CTime nowtime;     
3 nowtime = CTime::GetCurrentTime();     
4     
5 sprintf(szCurrentDateTime, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d",     
6     nowtime.GetYear(), nowtime.GetMonth(), nowtime.GetDay(),     
7     nowtime.GetHour(), nowtime.GetMinute(), nowtime.GetSecond());  

 

用VC++获取系统时间几种方法:

A:

1 使用time_t time( time_t * timer )    精确到秒,计算时间差使用double difftime( time_t timer1, time_t timer0 )
2 使用clock_t clock() 得到的是CPU时间    精确到1/CLOCKS_PER_SEC秒
3 使用DWORD GetTickCount() 得到的是系统运行的时间 精确到毫秒
4 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒
5 要获取高精度时间,可以使用下面的方法, 然后用两次计数器的差除以Frequency就得到时间。
1     BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)       //获取系统的计数器的频率
2     BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)//获取计数器的值
6 还有David的文章中提到的方法:
    Multimedia Timer Functions
    The following functions are used with multimedia timers.
    timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
    timeGetTime/timeKillEvent/TimeProc/timeSetEvent  精度很高
   
附:
GetTickCount()和GetCurrentTime()都只精确到55ms(1个tick就是55ms)。如果要精确到毫秒,应该使用timeGetTime函数或QueryPerformanceCounter函数
GetSystemTime返回的是格林威志标准时间
GetLocalTime,和上面用法一样,返回的是你所在地区的时间,中国返回的是北京时间
 
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // address of system time structure
);
函数就可以获得了,其中LPSYSTEMTIME 是个结构体
含:年,月,日,周几,小时,分,秒,毫秒。

VC++获得当前系统时间的几种方案

//方案- 优点:仅使用C标准库;缺点:只能精确到秒级
 1 #include < time.h>   
 2 #include < stdio.h>   
 3 int main( void )   
 4 {   
 5 time_t t = time( 0 );   
 6 char tmp[64];   
 7 strftime( tmp, sizeof(tmp), " %Y/%m/%d %X %A 本年第%j天 %z" , localtime(&t) );   
 8 puts( tmp );   
 9 return 0;   
10 }   

//方案二 优点:能精确到毫秒级;缺点:使用了windows API

 1 #include < windows.h>   
 2 #include < stdio.h>   
 3 int main( void )   
 4 {   
 5    SYSTEMTIME sys;   
 6    GetLocalTime( &sys );   
 7    printf( " M/d/d d:d:d.d 星期\n"   
 8    ,sys.wYear,sys.wMonth,sys.wDay   
 9    ,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds   
10    ,sys.wDayOfWeek);   
11    return 0;   
12 }   

 

//方案三,优点:利用系统函数

1 #include< stdlib.h>   
2 #include< iostream>   
3 using namespace std;   
4 void main(){   
5     system(" time" );   
6 }   

可以改变电脑的时间设定

方案4:

 1 #include< iostream>   
 2 #include< ctime>   
 3 using namespace std;   
 4 int main()   
 5 {   
 6    time_t now_time;   
 7    now_time = time(NULL);   
 8    cout< < now_time;   
 9    return 0;   
10 }   

 

另一:_strdate(tempstr);

另二: CTime

 

1 CString CTestView::GetTime()   
2 {   
3   CTime CurrentTime=CTime::GetCurrentTime();   
4   CString strTime;   
5   strTime.Format(" %d:%d:%d" ,CurrentTime.GetHour(),                CurrentTime.GetMinute()   
6   ,CurrentTime.GetSecond());   
7   return strTime;   
8 } 

 

 

VC++ 时间类型转换: CTime, COleDateTime, time_t, CString

CTime==>CString 
 1 CTime time;
 2 time.GetCurrentTime();
 3 CString str;
 4 str.Format("%s",time.Format("%y:%m:%d %H-%M-%S")
 5 
 6 //方法1
 7 CString str;
 8 CTime t = CTime::GetCurrentTime();
 9 str.Format("%d-%d-%d",t.GetYear(),t.GetMonth(),t.GetDay());
10 //方法2
11 CString strTime;
12 CTime tTime = CTime::GetCurrentTime();
13 strTime = tTime.Format("%Y-%m-%d %H:%M:%S");

 


CString ==>CTime 
  //方法1
 1 strCString="2003-10-27 6:24:37"; //CString--->COleDateTime 
 2 COleVariant vtime(strCString);
 3 vtime.ChangeType(VT_DATE);
 4 COleDateTime time4=vtime;
 5 //方法2 
 6 COleDateTime time1(1977,4,16,2,2,2); //COleDataTime--->CTime
 7 SYSTEMTIME systime;
 8 VariantTimeToSystemTime(time1, &systime);
 9 CTime tm(systime);
10 //方法3 
11 time_t time2=tm.GetTime(); //CTime--->time_t 
12 COleDateTime time3(time2); //time_t--->COleDateTime 

 



时间差
1 COleDateTime strFirst,strEnd;
2 strFirst = COleDateTime(strFirst.GetYear(),strFirst.GetMonth(),strFirst.GetDay(),0,0,0);
3 strEnd = COleDateTime(tmCurrent.GetYear(),tmCurrent.GetMonth(),tmCurrent.GetDay(),23,59,59);
4 tspan= strEnd - strFirst;

 

 

转载于:https://www.cnblogs.com/CPYER/p/3260164.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值