C/C++以及Linux下的时间函数 一、time.h
time.h是C/C++中的日期和时间头文件。 从系统时钟时间的方式 关于time_t 包含文件:<time.h> 既然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秒(不包括该时间点)之前的时间。 在time.h头文件中,我们还可以看到一些函数,它们都是以time_t为参数类型或返回值类型的函数: 二、sys/time.h sys/time.h是Linux下特有的时间头文件
执行结果如上图 struct timeval结构体 该结构体是Linux系统中定义,struct timeval结构体在 中的定义为: 其中,tv_sec为1970年1月1日0时0分0秒到now的的秒数,tv_usec为微秒数,即秒后面的零头。 需要注意的是,因为循环过程,新建结构体变量等过程需消耗部分时间,我们作下面的运算时得到的结果并不是整的2s
ms部分有些许误差,多了一些输出或者创建对象的时间 三、 Unix/Linux都是采用UTC(Universal Coordinated Time),1970.1.1到现在的秒数,采用time_t(long int)存储。 下面介绍一些结构体和相关函数 1. 时间结构体 都定义在time.h头文件中,对余时间和日历的具体内容,包括 时间:time_t, timeval, time_spec, 精度越来越高 日历:tm 1.1 time_t time_t表示为从UTC(coordinated universal time)时间1970年1月1日00时00分00秒(也称为Linux系统的Epoch时间)到当前时刻的秒数,只是精确到秒 1.2 timeval 精确到微秒 1.3 timespec 精确到纳秒 1.4 tm 前9个成员是必须成员,最后2个成员根据系统会有不同。 tm_gmtoff:指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数 tm_zone:当前时区的名字(与环境变量TZ有关) 2. 系统时间 2.1 time_t time( time_t *t ); t和返回值都返回UTC时间,t可以为空 所在头文件 time.h 2.2 gettimeofday 更高的精度 头文件:sys/time.h 3. timeval 运算 在sys/time.h中还定义了5个宏对timeval 进行算数运算 4. time_t –>tm 4.1 struct tm* gmtime( const time_t* p_time ); 头文件:time.h 返回:国际标准时间(GMT) 4.2 struct tm* localtime( const time_t* p_time ); 头文件:time.h 返回:本地时间(受时区影响,与环境变量TZ有关) 5. tm –> time_t 头文件:time.h time_t mktime( struct tm* p_tm ); 6. time –> char* 6.1 asctime 头文件:#include <time.h> 函数定义:char *asctime(const struct tm *p_tm); 功能描述:asctime( )将参数p_tm指向的tm结构体数据转换成实际使用的时间日期表示方法,并以字符串形式返回(与ctime函数相同)。字符串格式为:”Wed Jun 20 21:00:00 2012\n”。 6.2 ctime 同asctime ctime一率使用当地时间,asctime则用tm结构内的timezone资讯来表示。 7. 格式化 strftime strptime 7.1 size_t strftime(char *str,size_t max,char *fmt,struct tm *tp); strftime有点像sprintf,其格式由fmt来指定。 %a : 本第几天名称,缩写。 %A : 本第几天名称,全称。 %b : 月份名称,缩写。 %B : 月份名称,全称。 %c : 与ctime/asctime格式相同。 %d : 本月第几日名称,由零算起。 %H : 当天第几个小时,24小时制,由零算起。 %I : 当天第几个小时,12小时制,由零算起。 %j : 当年第几天,由零算起。 %m : 当年第几月,由零算起。 %M : 该小时的第几分,由零算起。 %p : AM或PM。 %S : 该分钟的第几秒,由零算起。 %U : 当年第几,由第一个日开始计算。 %W : 当年第几,由第一个一开始计算。 %w : 当第几日,由零算起。 %x : 当地日期。 %X : 当地时间。 %y : 两位数的年份。 %Y : 四位数的年份。 %Z : 时区名称的缩写。 %% : %符号。 将下面的7.2的内容为大家分享完之后,有关Unix/Linux时间、日历函数的内容,达内IT培训 老师就为同学们讲解完了,笔者不敢说自己分享的内容一定能够让你理解,所以读者们一定要认真阅读。 7.2 char * strptime(char *s,char *fmt,struct tm *tp); 如同scanf一样,解译字串成为tm格式。 %h : 与%b及%B同。 %c : 读取%x及%X格式。 %C : 读取%C格式。 %e : 与%d同。 %D : 读取%m/%d/%y格式。 %k : 与%H同。 %l : 与%I同。 %r : 读取”%I:%M:%S %p”格式。 %R : 读取”%H:%M”格式。 %T : 读取”%H:%M:%S”格式。 %y : 读取两位数年份。 %Y : 读取四位数年份。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/75804.html