Windows时间函数

计算程序运行时长:

1. 添加定时器ON_WM_TIMER()

初始化:

m_dwStartTime = GetCurrentTime();

SetTimer(1, 1000, NULL);

void CVPNDialerDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值

	DWORD dwTime = GetCurrentTime() - m_dwStartTime;

	CString str, str1;
	str1.Format("运行时间:%02d:", dwTime / 3600000);
	dwTime %= 3600000;
	str = str1;

	str1.Format("%02d:", dwTime / 60000);
	dwTime %= 60000;
	str += str1;

	str1.Format("%02d", dwTime / 1000);
	str += str1;

	m_StatBar.SetText(str, 4, 0);

	CDialogEx::OnTimer(nIDEvent);
}

1. 用CTime类(获取系统当前时间,精确到秒)

//获取系统时间
CTime sTmp = CTime::GetCurrentTime();
CString sTime = sTmp.Format("%Y-%m-%d %H:%M:%S");  //%Y四位年;%y2位年

(1).从CTime中提取年月日时分秒

 CTime t = CTime::GetCurrentTime();

  int d=t.GetDay();            //获得几号

  int y=t.GetYear();           //获取年份

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

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

  int mm=t.GetMinute();   //获取分钟

  int s=t.GetSecond();      //获取秒

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

(2).计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下:

CTime t1(1999, 3, 19, 22, 15, 0);

CTime t = CTime::GetCurrentTime();

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

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

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

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

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

2.使用GetLocalTime(),Windows API 函数,获取当地的当前系统日期和时间(精确到毫秒)

此函数会把获取的系统时间信息存储到SYSTEMTIME结构体里边

typedef struct _SYSTEMTIME

{

WORD wYear;     //年

WORD wMonth;    //月

WORD wDayOfWeek;  //星期:0为星期日,1为星期一,2为星期二……

WORD wDay;     //日

WORD wHour;     //时

WORD wMinute;    //分

WORD wSecond;    //秒

WORD wMilliseconds; //毫秒

}SYSTEMTIME,*PSYSTEMTIME;

例:

SYSTEMTIME st;

GetLocalTime(&st);

CString strDate,strTime;

strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay);

strTime.Format("%2d:%2d:%2d",st.wHour,st.wMinute,st.wSecond) ;

3.使用GetTickCount()或GetCurrentTime(),返回毫秒数

GetTickCount()和GetCurrentTime()都只精确到55ms(1个tick就是55ms)。

如果要精确到毫秒,应该使用timeGetTime函数或QueryPerformanceCounter函数

//获取系统运行时间

DWORD dwTime = GetCurrentTime() - m_dwStartTime;

CString str, str1;

str1.Format("运行时间:%02d:", dwTime / 3600000);

dwTime %= 3600000;

str = str1;

str1.Format("%02d:", dwTime / 60000);

dwTime %= 60000;

str += str1;

str1.Format("%02d", dwTime / 1000);

str += str1;

4.使用time_t time( time_t * timer ) 仅使用C标准库(精确到秒)

得到从标准计时点(一般是1970-01-01 00:00:00)到当前时间的秒数

计算时间差:double difftime( time_t timer1, time_t timer0)

struct tm *localtime(const time_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:中国标准时间

%% % 字符。

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

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)   获取系统的计数器的频率

BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount) 获取计数器的值

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

6.还有David的文章中提到的方法:

Multimedia Timer Functions

The following functions are used with multimedia timers.

timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime

timeGetTime/timeKillEvent/TimeProc/timeSetEvent 精度很高

GetSystemTime返回的是格林威志标准时间

VOID GetSystemTime(

LPSYSTEMTIME lpSystemTime // address of system time structure

);



版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-06 14:21:17

Windows时间函数的相关文章

(转)windows平台时间函数性能比较QueryPerformanceCounter,GetTickCount,ftime,time,GetLocalTime,GetSystemTimeAsFileTime

执行 10000000 次, 耗时 2258,369 微秒     QueryPerformanceCounter 执行 10000000 次, 耗时 26,347 微秒    GetTickCount 执行 10000000 次, 耗时 242,879 微秒     time() c的时间函数 time(time_t) 大概比GetSystemTimeAsFileTime慢6倍,比_ftime 快6倍 执行 10000000 次, 耗时 1310,066 微秒   _ftime 执行 1000

错误处理和时间函数

错误处理和时间函数 一.错误处理 a)         错误报告级别 语法错误: error 会给一个致命错误  终止程序继续执行 运行时错误: notice warning  运行代码的时候错了 有错误提示,但是他们不会影响程序运行 但是结果不是我们想要的 逻辑错误:逻辑出现错误  最大的难就 就是不报错  不好排除 notice: 本身不是一个错误  只是一个提示 这个错误可以忽略 warning: 警告只要产生warning错误 程序的执行结果就不是我们想要的,但是这个级别的错误,不会终止

PHP 中日期时间函数 date() 用法总结

[导读] date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考.格式化日期date() 函数的第一个参数规定了如何格式化日期 时间.它使用字母来表示日期和时间 格式化日期date() 函数的第一个参数规定了如何格式化日期/时间.它使用字母来表示日期和时间的格式.这里列出了一些可用的字母: •d - 月中的天 (01-31)•m - 当前月,以数字计 (01-12)•Y - 当前的年(四位数)您可以在我们的 PHP Date 参考手

[游戏学习26] MFC 时间函数 画图形

>_<:这里第一次介绍MFC的时间函数,功能和Win32里的计时器类似. >_<:这里还介绍了MFC的图形绘制函数,和Win32有一点区别 >_<:ABC.h 1 #define EX 1 //该点左鼠标 2 #define OH 2 //该点右鼠标 3 4 class CMyApp : public CWinApp 5 { 6 public: 7 virtual BOOL InitInstance (); 8 }; 9 10 class CMainWindow : p

C++中的时间函数

C++获取时间函数众多,何时该用什么函数,拿到的是什么时间?该怎么用?很多人都会混淆. 本文是本人经历了几款游戏客户端和服务器开发后,对游戏中时间获取的一点总结. 最早学习游戏客户端时,为了获取最精确的时间,使用两个函数 BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency); BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount); 这两个函数分别是获取CPU的时钟频率和CPU计数器

C/C++时间函数总结

C语言的时间函数 -------- 头文件time.h -------- 相关函数和接口asctime() 将时间日期以字符串格式表示ctime() 将时间日期以字符串格式表示gettimeofday() 获取当前时间gmtime() 获取当前时间和日期localtime() 获取当前时间和日期并转换为本地时间mktime() 将时间转换成经过的秒数settimeofday() 设置当前时间戳time() 获取当前时间(以秒数表示) struct tm*gmtime(const time_t*t

DB2 日期时间函数

db2日期时间函数 (DATE(TRIM(CHAR(DT#11Y))||'-'||TRIM(CHAR(DT#11M))||'-'||TRIM(CHAR(DT#11D))) BETWEEN DATE('" & strDate1 & "') AND DATE('" & strDate2 & "')) (Y > y) OR ((Y = y) AND (M > m)) OR ((Y = y) AND (M = m) AND (D

PHP中日期和时间函数简介

PHP中日期和时间相关函数简介 一.UNIX时间戳 在当前大多数的UNIX系统中,保存当前日期和时间的方法是:保存格林尼治标准时间从1970年1月1日零点起到当前时刻的秒数,以32为整列表示.1970年1月1日零点也称为UNIX纪元.在Windows系统下也可以使用UNIX时间戳,简称时间戳,但如果时间在1970年以前或2038年以后,处理的时候可能会出现问题. PHP在处理有些数据,特别是对数据库中时间类型的数据进行格式化时,经常需要先将时间类型的数据转化为UNIX时间戳再进行处理,另外,不同

PHP中日期时间函数date()用法总结

格式化日期date() 函数的第一个参数规定了如何格式化日期/时间.它使用字母来表示日期和时间的格式.这里列出了一些可用 的字母: •d - 月中的天 (01-31)•m - 当前月,以数字计 (01-12)•Y - 当前的年(四位数)您可以在我们的 PHP Date 参考手册中,找到格式参数中可以使用的所有字母. 可以在字母之间插入其他字符,比如 "/"."." 或者 "-",这样就可以增加附加格式了: echo date("Y/m/