time的示例.docx

上传人:b****9 文档编号:25648433 上传时间:2023-06-11 格式:DOCX 页数:21 大小:25.34KB
下载 相关 举报
time的示例.docx_第1页
第1页 / 共21页
time的示例.docx_第2页
第2页 / 共21页
time的示例.docx_第3页
第3页 / 共21页
time的示例.docx_第4页
第4页 / 共21页
time的示例.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

time的示例.docx

《time的示例.docx》由会员分享,可在线阅读,更多相关《time的示例.docx(21页珍藏版)》请在冰豆网上搜索。

time的示例.docx

time的示例

//方案—优点:

仅使用C标准库;缺点:

只能精确到秒级

#include 

#include 

intmain(void) 

   time_tt=time(0); 

   chartmp[64]; 

   strftime(tmp,sizeof(tmp),"%Y/%m/%d%X%A本年第%j天%z",localtime(&t)); 

   puts(tmp); 

   return0; 

}

size_tstrftime(char*strDest,size_tmaxsize,constchar*format,conststructtm*timeptr);

根据格式字符串生成字符串。

structtm*localtime(consttime_t*timer);

取得当地时间,localtime获取的结果由结构tm返回

返回的字符串可以依下列的格式而定:

%a星期几的缩写。

Eg:

Tue 

%A星期几的全名。

Eg:

Tuesday

%b月份名称的缩写。

 

%B月份名称的全名。

 

%c本地端日期时间较佳表示字符串。

 

%d用数字表示本月的第几天(范围为00至31)。

日期

%H用24小时制数字表示小时数(范围为00至23)。

 

%I用12小时制数字表示小时数(范围为01至12)。

 

%j以数字表示当年度的第几天(范围为001至366)。

 

%m月份的数字(范围由1至12)。

%M分钟。

 

%p以''AM''或''PM''表示本地端时间。

 

%S秒数。

 

%U数字表示为本年度的第几周,第一个星期由第一个周日开始。

 

%W数字表示为本年度的第几周,第一个星期由第一个周一开始。

 

%w用数字表示本周的第几天(0为周日)。

 

%x不含时间的日期表示法。

 

%X不含日期的时间表示法。

Eg:

15:

26:

30

%y二位数字表示年份(范围由00至99)。

 

%Y完整的年份数字表示,即四位数。

Eg:

2008

%Z(%z)时区或名称缩写。

Eg:

中国标准时间 

%%%字符。

//方案二优点:

能精确到毫秒级;缺点:

使用了windowsAPI 

#include 

#include 

intmain(void) 

SYSTEMTIMEsys; 

GetLocalTime(&sys); 

printf("%4d/%02d/%02d%02d:

%02d:

%02d.%03d星期%1d\n",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek); 

return0;

}

//方案三,优点:

利用系统函数,还能修改系统时间

//此文件必须是c++文件

#include

#include

usingnamespacestd;

voidmain()

{

   system("time");

}

//方案四,将当前时间折算为秒级,再通过相应的时间换算即可

//此文件必须是c++文件

#include

#include

usingnamespacestd;

intmain()

{

time_tnow_time;

now_time=time(NULL);

cout<

return0;

}

//方案五,貌似这个也是兼容C/C++的

int64_tts=systemTime(); 

打印时候使用%ld

====================================================================================================

C语言中如何获取时间?

精度如何?

1使用time_ttime(time_t*timer)精确到秒

2使用clock_tclock()得到的是CPU时间精确到1/CLOCKS_PER_SEC秒

3计算时间差使用doubledifftime(time_ttimer1,time_ttimer0)

4使用DWORDGetTickCount()精确到毫秒

5如果使用MFC的CTime类,可以用CTime:

:

GetCurrentTime()精确到秒

6要获取高精度时间,可以使用

BOOLQueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)

获取系统的计数器的频率

BOOLQueryPerformanceCounter(LARGE_INTEGER*lpPerformanceCount)

获取计数器的值

然后用两次计数器的差除以Frequency就得到时间。

7MultimediaTimerFunctions

Thefollowingfunctionsareusedwithmultimediatimers.

timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime

//*********************************************************************

//用标准C实现获取当前系统时间的函数

 

一.time()函数

 

     time(&rawtime)函数获取当前时间距1970年1月1日的秒数,以秒计数单位,存于rawtime中。

#include"time.h"

voidmain()

{

time_trawtime;

structtm*timeinfo;

time(&rawtime);

timeinfo=localtime(&rawtime);

printf("\007Thecurrentdate/timeis:

%s",asctime(timeinfo));

exit(0);

}

=================

#include--必须的时间函数头文件

time_t--时间类型(time.h定义是typedeflongtime_t;追根溯源,time_t是long)

structtm--时间结构,time.h定义如下:

inttm_sec;

inttm_min;

inttm_hour;

inttm_mday;

inttm_mon;

inttm_year;

inttm_wday;

inttm_yday;

inttm_isdst;

time(&rawtime);--获取时间,以秒计,从1970年1月一日起算,存于rawtime

localtime(&rawtime);--转为当地时间,tm时间结构

asctime()--转为标准ASCII时间格式:

星期月日时:

分:

秒年

 

-----------------------------------------------------------------------------

二.clock()函数,用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。

clock_tclock(void);

#include

clock_tt=clock();

longsec=t/CLOCKS_PER_SEC;

他是记录时钟周期的,实现看来不会很精确,需要试验验证;

---------------------------------------------------------------------------

三.gettime(&t);据说tc2.0的time结构含有毫秒信息

#include

#include

intmain(void)

{

structtimet;

gettime(&t);

printf("Thecurrenttimeis:

-:

d:

d.d\n",

t.ti_hour,t.ti_min,t.ti_sec,t.ti_hund);

return0;

}

time是一个结构体,,其中成员函数ti_hund是毫秒。

 

--------------------------------------------------------------------------------

四.GetTickCount(),这个是windows里面常用来计算程序运行时间的函数;

DWORDdwStart=GetTickCount();

//这里运行你的程序代码

DWORDdwEnd=GetTickCount();

则(dwEnd-dwStart)就是你的程序运行时间,以毫秒为单位

这个函数只精确到55ms,1个tick就是55ms。

--------------------------------------------------------------------------------

五.timeGetTime()t,imeGetTime()基本等于GetTickCount(),但是精度更高

DWORDdwStart=timeGetTime();

//这里运行你的程序代码

DWORDdwEnd=timeGetTime();

则(dwEnd-dwStart)就是你的程序运行时间,以毫秒为单位

虽然返回的值单位应该是ms,但传说精度只有10ms。

=========================================

//*****************************************************************Unix

##unix时间相关,也是标准库的

//*********************************************************************

1.timegm函数只是将structtm结构转成time_t结构,不使用时区信息;

time_ttimegm(structtm*tm);

2.mktime使用时区信息

time_tmktime(structtm*tm);

timelocal函数是GNU扩展的与posix函数mktime相当

time_ttimelocal(structtm*tm);

3.gmtime函数只是将time_t结构转成structtm结构,不使用时区信息;

structtm*gmtime(consttime_t*clock);

4.localtime使用时区信息

structtm*localtime(consttime_t*clock);

1.time获取时间,stime设置时间

time_tt;

t=time(&t);

2.stime其参数应该是GMT时间,根据本地时区设置为本地时间;

intstime(time_t*tp)

3.UTC=true表示采用夏时制;

4.文件的修改时间等信息全部采用GMT时间存放,不同的系统在得到修改时间后通过localtime转换成本地时间;

5.设置时区推荐使用setup来设置;

6.设置时区也可以先更变/etc/sysconfig/clock中的设置再将ln-fs/usr/share/zoneinfo/xxxx/xxx/etc/localtime才能重效

time_t只能表示68年的范围,即mktime只能返回1970-2038这一段范围的time_t

看看你的系统是否有time_t64,它能表示更大的时间范围

//***************************************************************windows

##Window里面的一些不一样的

//*********************************************************************

 

一.CTime()类

VC编程一般使用CTime类获得当前日期和时间

 

CTimet=GetCurrentTime();

SYSTEMTIME结构包含毫秒信息

typedefstruct_SYSTEMTIME{

WORDwYear;

WORDwMonth;

WORDwDayOfWeek;

WORDwDay;

WORDwHour;

WORDwMinute;

WORDwSecond;

WORDwMilliseconds;

}SYSTEMTIME,*PSYSTEMTIME;

SYSTEMTIMEt1;

GetSystemTime(&t1)

CTimecurTime(t1);

WORDms=t1.wMilliseconds;

SYSTEMTIMEsysTm;

:

:

GetLocalTime(&sysTm);

在time.h中的_strtime()//只能在windows中用

chart[11];

_strtime(t);

puts(t);

 

//*****************************

获得当前日期和时间

CTimetm=CTime:

:

GetCurrentTime();

CStringstr=tm.Format("%Y-%m-%d");

在VC中,我们可以借助CTime时间类,获取系统当前日期,具体使用方法如下:

CTimet=CTime:

:

GetCurrentTime();//获取系统日期,存储在t里面

intd=t.GetDay();//获得当前日期

inty=t.GetYear();//获取当前年份

intm=t.GetMonth();//获取当前月份

inth=t.GetHour();//获取当前为几时

intmm=t.GetMinute();//获取当前分钟

ints=t.GetSecond();//获取当前秒

intw=t.GetDayOfWeek();//获取星期几,注意1为星期天,7为星期六

 

二.CTimeSpan类

如果想计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下:

CTimet1(1999,3,19,22,15,0);

CTimet=CTime:

:

GetCurrentTime();

CTimeSpanspan=t-t1;//计算当前系统时间与时间t1的间隔

intiDay=span.GetDays();//获取这段时间间隔共有多少天

intiHour=span.GetTotalHours();//获取总共有多少小时

intiMin=span.GetTotalMinutes();//获取总共有多少分钟

intiSec=span.GetTotalSeconds();//获取总共有多少秒

 

 

------------------------------------------------------------------------------

 

三._timeb()函数

_timeb定义在SYS\TIMEB.H,有四个fields

dstflag

millitm

time

timezone

void_ftime(struct_timeb*timeptr);

struct_timebtimebuffer;

_ftime(&timebuffer);

取当前时间:

文档讲可以到ms,有人测试,好象只能到16ms!

 

 

四.设置计时器

定义TIMERID

#defineTIMERID_JISUANFANGSHI2

在适当的地方设置时钟,需要开始其作用的地方;

SetTimer(TIMERID_JISUANFANGSHI,200,NULL);

在不需要定时器的时候的时候销毁掉时钟

KillTimer(TIMERID_JISUANFANGSHI);

对应VC程序的消息映射

voidCJisuan:

:

OnTimer(UINTnIDEvent)

{switch(nIDEvent)}

---------------------------------------------------------------------------------------

##如何设定当前系统时间---------------------------------------windows

SYSTEMTIMEm_myLocalTime,*lpSystemTime;

m_myLocalTime.wYear=2003;

m_myLocalTime.wM;

m_myLocalTime.wDay=1;

m_myLocalTime.wHour=0;

m_myLocalTime.wMinute=0;

m_myLocalTime.wSec;

m_myLocalTime.wMillisec;

lpSystemTime=&m_myLocalTime;

if(SetLocalTime(lpSystemTime))//此处换成SetSystemTime()也不行

MessageBox("OK!

");

else

MessageBox("Error!

");

SYSTEMTIMEm_myLocalTime,*lpSystemTime;

m_myLocalTime.wYear=2003;

m_myLocalTime.wM;

m_myLocalTime.wDay=1;

lpSystemTime=&m_myLocalTime;

if(SetDate(lpSystemTime))//此处换成SetSystemTime()也不行

MessageBox("OK!

");

else

MessageBox("Error!

");

 

本文来自CSDN博客,转载请标明出处:

 

一种制作微秒级精度定时器的方法

当使用定时器时,在很多情况下只用到毫秒级的时间间隔,所以只需用到下面的两种常用方式就满足要求了。

一是用SetTimer函数建立一个定时器后,在程序中通过处理由定时器发送到线程消息队列中的WM_TIMER消息,而得到定时的效果(退出程序时别忘了调用和SetTimer配对使用的KillTimer函数)。

二是利用GetTickCount函数可以返回自计算机启动后的时间,通过两次调用GetTickCount函数,然后控制它们的差值来取得定时效果,此方式跟第一种方式一样,精度也是毫秒级的。

用这两种方式取得的定时效果虽然在许多场合已经满足实际的要求,但由于它们的精度只有毫秒级的,而且在要求定时时间间隔小时,实际定时误差大。

下面介绍一种能取得高精度定时的方法。

在一些计算机硬件系统中,包含有高精度运行计数器(high-resolution   performance   counter),利用它可以获得高精度定时间隔,其精度与CPU的时钟频率有关。

采用这种方法的步骤如下:

1、首先调用QueryPerformanceFrequency函数取得高精度运行计数器的频率f。

单位是每秒多少次(n/s),此数一般很大。

2、在需要定时的代码的两端分别调用QueryPerformanceCounter以取得高精度运行计数器的数值n1,n2。

两次数值的差值通过f换算成时间间隔,t=(n2-n1)/f。

下面举一个例子来演示这种方法的使用及它的精确度。

在VC   6.0   下用MFC建立一个对话框工程,取名为HightTimer.在对话框面板中控件的布局如下图:

其中包含两个静态文本框,两个编辑框和两个按纽。

上面和下面位置的编辑框的ID分别为IDC_E_TEST和IDC_E_ACTUAL,通过MFC  ClassWizard添加的成员变量也分别对应为DWORD   m_dwTest和DWORD   m_dwAct.   “退出”按纽的ID为IDOK,“开始测试”按纽ID为IDC_B_TEST,用MFC   ClassWizard添加此按纽的单击消息处理函数如下:

void   CHightTimerDlg:

:

OnBTest()

{

//   TODO:

   Add   your   control   notification   handler   code   here

UpdateData(TRUE);   //取输入的测试时间值到与编辑框相关联的成员变量m_dwTest中

  

LARGE_INTEGER   frequence;

if(!

QueryPerformanceFrequency(   &frequence))   //取高精度运行计数器的频率,若硬件不支持则返回FALSE

MessageBox("Your   computer   hardware   doesn't   support   the   high-resolution   performance   counter",

"Not   Support",   MB_ICONEXCLAMATION   |   MB_OK);

 

LARGE_INTEGER   test,   ret;

test.QuadPart   =   frequence.QuadPart   *   m_dwTest   /   1000000;   //通过频率换算微秒数到对应的数量(与CPU时钟有关),1秒=1000000微秒

ret   =   MySleep(   test   );   //调用此函数开始延时,返回实际花销的数量

 

m_dwAct   =   (DWORD)(1000000   *   ret.QuadPart   /   frequence.QuadPart   );   //换算到微秒数

 

UpdateData(FALSE);   //显示到对话框面板

}

   其中上面调用的MySleep函数如下:

 

LARGE_INTEGER   CHightTimerDlg:

:

MySleep(LARGE_INTEGER   Interval)

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

//   功能:

执行实际的延

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 艺术创意

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1