C/C++教程

时间函数 c/c++

本文主要是介绍时间函数 c/c++,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

c/c++的时间函数是使用

1、明确几个时间概念

  1. Coordinated Universal Time(UTC):世界标准时间,也就是格林威治标准时间,中国位于东八区,中国内地的时间为UTC+8

  1. Clander Time:日历时间,从一个时间点(1970年1月1日0时0分0秒)到现在时间点所经历的秒数,这个时间为本地时间
  2. Clock tick:时钟计时单元

2、相关头文件:   time.h

       tm结构:

#ifndef _TM_DEFINED 
struct tm { 
         int tm_sec;      /* 秒 – 取值区间为[0,59] */ 
         int tm_min;      /* 分 - 取值区间为[0,59] */ 
         int tm_hour;     /* 时 - 取值区间为[0,23] */ 
         int tm_mday;     /* 一个月中的日期 - 取值区间为[1,31] */ 
         int tm_mon;      /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */ 
         int tm_year;     /* 年份,其值等于实际年份减去1900 */ 
         int tm_wday;     /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此推 */int tm_yday;     /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */ 
         int tm_isdst;    /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/ 
         }; 
#define _TM_DEFINED 
#endif 

3、时间函数:

  1. 计时函数  clock_t clock (void)

数据类型clock_t:

#ifndef _CLOCK_T_DEFINED 
typedef long clock_t; 
#define _CLOCK_T_DEFINED 
#endif

       这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick),在MSDN中称之为挂钟时间(wal-clock)。

在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下: 

#define CLOCKS_PER_SEC ((clock_t)1000) 。可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子,你可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间。

  1. time_t time( time_t* timer)  获取日历时间

       如果你已经声明了参数timer,你可以从参数timer返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NUL),函数将只通过返回值返回现在的日历时间

  1. tm结构获取时间:

       struct tm * gmtime ( const time_t * timer)  将日历时间转化为标准时间

struct tm * localtime(const time_t * timer)  将日历时间转化为本地时间

  1. 固定时间格式输出函数:返回的时间格式为: 星期几 月份 日期 时:分:秒 年\n\0 

char * asctime (const struct tm* timeptr)   

通过tm结构来生成具有固定格式的保存时间信息的字符串

char* ctime ( const struct tm* timeptr)

通过日历时间来生成字符串

  1. 自定义时间格式

size_t strftime( 
    char *strDest, 
    size_t maxsize,

           const char *format, 
        const struct tm *timeptr  
    );

我们可以根据format指向字符串中格式命令把timeptr中保存的时间信息放在strDest指向的字符串中,最多向strDest中存放maxsize个字符。该函数返回向strDest指向的字符串中放置的字符数。 

         函数strftime()的操作有些类似于sprintf():识别以百分号(%)开始的格式命令集合,格式化输出结果放在一个字符串中。格式化命令说明串strDest中各种日期和时间信息的确切表示方法。格式串中的其他字符原样放进串中。格式命令列在下面,它们是区分大小写的。

%a 星期几的简写  
%A 星期几的全称  
%b 月分的简写  
%B 月份的全称  
%c 标准的日期的时间串  
%C 年份的后两位数字  
%d 十进制表示的每月的第几天  
%D 月/天/年  
%e 在两字符域中,十进制表示的每月的第几天  
%F 年-月-日  
%g 年份的后两位数字,使用基于周的年  
%G 年分,使用基于周的年  
%h 简写的月份名  
%H 24小时制的小时  
%I 12小时制的小时 
%j 十进制表示的每年的第几天  
%m 十进制表示的月份  
%M 十时制表示的分钟数  
%n 新行符  
%p 本地的AM或PM的等价显示  
%r 12小时的时间  
%R 显示小时和分钟:hh:mm  
%S 十进制的秒数  
%t 水平制表符  
%T 显示时分秒:hh:mm:ss  
%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0) 
%U 第年的第几周,把星期日做为第一天(值从0到53) 
%V 每年的第几周,使用基于周的年  
%w 十进制表示的星期几(值从0到6,星期天为0) 
%W 每年的第几周,把星期一做为第一天(值从0到53)  
%x 标准的日期串  
%X 标准的时间串  
%y 不带世纪的十进制年份(值从0到99) 
%Y 带世纪部分的十进制年份  
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。 
%% 百分号 

  1. double difftime(time_t time1, time_t time0)   计算两个时间点之间的时间差   
  2. time_t mktime(struct tm * timeptr) tm    结构时间转化成日历时间

代码:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int  main()
{
	clock_t start, end;				//计算程序执行时间
	time_t caltime;					//日历时间
	char str[100];					//自定义时间格式字符串
	struct tm* local;				//保存本地时间的结构
	start = clock();
	caltime = time(NULL);
	//计算日历时间
	printf("\n当前时刻的日历时间为:%lld", caltime);
	//固定时间格式输出
	local = gmtime(&caltime);
	printf("\n\n当前时刻的世界标准时间为:%d.%d.%d %d:%d:%d", local->tm_year+1900,local->tm_mon+1,local->tm_mday,\
		local->tm_hour,local->tm_min,local->tm_sec);
	local = localtime(&caltime);
	printf("\n\n当前时刻的本地标准时间为:%d.%d.%d %d:%d:%d", local->tm_year + 1900, local->tm_mon + 1, local->tm_mday, \
		local->tm_hour, local->tm_min, local->tm_sec);
	//自定义时间格式输出,只输出小时分钟
	strftime(str, 100, "\n\n\nThe time is %R\n", local);
	puts(str);
	//将本地时间转化为日历时间
	caltime = mktime(local);
	printf("\n转化后的日历时间为:%lld\n", caltime); // 可以判断两个caltime是否相等
	end = clock();
	printf("\n\n上述操作花费%f seconds\n", difftime(end, start)/CLOCKS_PER_SEC);
	return 0;
}

结果:

 

这篇关于时间函数 c/c++的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!