C++: 时间处理

这里讲下c++的时间处理,其实是继承的标准c的ctime.h, 我们在c++里用<ctime>

拿个题目, 看代码自然就明白了。

/*
功能: 任意给出一个时间,计算下一秒是多少?
原型:
void CalcNextSecond(char * pcCurrentTime, char * pcNextSecondTime);

输入参数:
char * pcCurrentTime: 当前时间,格式:2001/12/24 12:02:21
输出参数:
char * pcNextSecondTime: 下一秒时间,格式:2001/12/24 12:02:22

返回值:
无。
*/

void CalcNextSecond(char * pcCurrentTime, char * pcNextSecondTime)
{
	/*在这里实现功能*/
	//check
	if(pcCurrentTime == 0  || pcNextSecondTime == 0)
		return;

	//提取字符串中的数据,转tm
	tm ti;
	sscanf(pcCurrentTime, "%d/%d/%d %d:%d:%d", &ti.tm_year, &ti.tm_mon, &ti.tm_mday, 
		&ti.tm_hour, &ti.tm_min, &ti.tm_sec);

	//tm转time_t
	ti.tm_year -= 1900;
	ti.tm_mon -= 1;
	time_t tt = mktime(&ti);

	tt++;
	//time转tm
	ti = *localtime(&tt);
	//tm格式化转字符串
	strftime(pcNextSecondTime, 100, "%Y/%m/%d %H:%M:%S", &ti);

	return ;
}


另:

time_t  ti;

time(&ti); //获取当前时间

转个time_t的定义:

包含文件:
#ifndef __TIME_T
#define __TIME_T      /*  避免重复定义  time_t */
typedef long      time_t;    /*  时间值time_t 为长整型的别名*/
#endif
 
既然time_t实际上是长整型,到未来的某一天,从一个时间点(一般是1970年1月1日0时0分0秒)到那时的秒数(即日历时间)超出了长整形所能表示的数的范围怎么办?对time_t数据类型的值来说,它所表示的时间不能晚于2038年1月18日19时14分07秒。为了能够表示更久远的时间,一些编译器厂商引入了64位甚至更长的整形数来保存日历时间。比如微软在Visual C++中采用了__time64_t数据类型来保存日历时间,并通过_time64()函数来获得日历时间(而不是通过使用32位字的time()函数),这样就可以通过该数据类型保存3001年1月1日0时0分0秒(不包括该时间点)之前的时间。
__time64_t 相关方法:  _localtime64_s()   _mktime64()
 
在time.h头文件中,我们还可以看到一些函数,它们都是以time_t为参数类型或返回值类型的函数:
 
double difftime(time_t time1, time_t time0);
time_t mktime(struct tm * timeptr);
time_t time(time_t * timer);
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);
 
此外,time.h还提供了两种不同的函数将日历时间(一个用time_t表示的整数)转换为我们平时看到的把年月日时分秒分开显示的时间格式tm:
 
struct tm * gmtime(const time_t *timer);                                          
struct tm * localtime(const time_t * timer);
 
通过查阅MSDN,我们可以知道Microsoft C/C++ 7.0中时间点的值(time_t对象的值)是从1899年12月31日0时0分0秒到该时间点所经过的秒数,而其它各种版本的Microsoft C/C++和所有不同版本的Visual C++都是计算的从1970年1月1日0时0分0秒到该时间点所经过的秒数

猜你喜欢

转载自blog.csdn.net/rydiy/article/details/8480642