linux下的常用时间函数总结
1、Unix系统一直使用两种不同的时间值:“日历时间”和“进程时间”
1.1、日历时间,日历时间是从国际标准时间公元1970年1月1日00:00:00到现在所经历的秒数;此时间精度为秒。
系统用time_t保存这种时间值,如果时间要求不是非常精确则可以使用此时间,例如记录文件修改的时间。
这里的time_t是个长整型数值,可以用函数:time_t time(time_t* calptr)获取此时间值,该函数会将时间值返回,同时如果参数不为空,时间值也会放在calptr所知向的单元内:
其使用方法如下面的小程序所示:
#include <time.h>
#include <stdio.h>
int main()
{
time_t curTime;
curTime = time(NULL);
printf("当前时间为:%ld\n",curTime);
}
1.2、进程时间(或者CPU时间),该时间以时钟滴答计算,系统用clock_t保存这种时间值。
时钟滴答:里上上曾经取每秒钟为50、60或100个滴答,使用sysconf函数可以得到每秒钟的滴答数。
度量一个进程的执行时间时,Unix系统使用以下三个进程时间值:
* 时钟时间,该时间是进程运行的总时间,它跟当前系统中运行的进程数等有关系。
* 用户CPU时间,该时间为执行用户指令所使用的时间。
* 系统CPU时间,该时间为执行该进程的内核调用所花费的时间。
通常情况下:进程时间(或者CPU时间) = 用户CPU时间 + 系统CPU时间;
这里的clock_t也是个长整型数值。同时,在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元(上述每秒滴答数),其定义如下:
#define CLOCKS_PER_SEC ((clock_t)1000)
2、linux下高精度时间的获取,可以使用函数gettimeofday(),其最高精度为微妙,该函数的原型为:
#include<sys/time.h>
int gettimeofday(struct timeval* restrict tp, void* restrict tzp);
[关键字restrict,只用于限定指针,用于告诉编译器这个指针所指向的内容,只有这个指针可以修改,详细解释请见:http://houjixin.blog.163.com/blog/static/3562841020132793039288/]
结构timval的的定义如下:
struct timeval
{
time_t tv_sec; /*seconds*/
long tv_usec; /* microseconds*/
};
下面的程序使用该函数获取程序的执行时间:
#include<stdio.h>
#include<sys/time.h>
#include<unistd.h>
int delay(int time)
{
int i,j;
for(i =0;i<time;i++)
for(j=0;j<5000;j++)
;
}
int main()
{
struct timeval start;
struct timeval end;
unsigned long diff;
gettimeofday(&start,NULL);
delay(10);
gettimeofday(&end,NULL);
diff = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;
printf(“thedifference is %ld\n”,diff);
return 0;
}
3、函数localtime和gmtime可以将日历时间转换成年、月、日、时、分、秒等表示的时间,放在结构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
函数localtime和gmtime的声明形式如下:
#intclude <time.h>
struct tm* gmtime(const time_t* calptr);
struct tm* localtime(const time_t* calptr);
此两个函数的区别为localtime将日历时间转换为本地时间(考虑到本地时区和夏时制标志),而gmtime则将日历时间转换为国际标准时间的年、月、日、时、分、秒、周日
4、函数mktime可以将保存在tm对象中的本地时间转换为time_t格式,其函数声明如下:
#intclude <time.h>
time_t mktime(struct tm* tmptr);
5、函数asctime和ctime,产生用字符串保存的时间,类似与date命令的输出,例如:2013年 03月 07日 星期四 17:55:55 CST,这两个函数的声明如下:
#intclude <time.h>
char* asctime(const struct tm* tmptr);
char* ctime(const time_t* calptr);
函数asctime的参数时tm格式保存的时间指针,而ctime的参数时指向日历时间的指针。
本文参考《UNIX环境高级编程》
linux下的常用时间函数总结相关推荐
- Linux下C语言时间函数使用及UTC时间转换本地时间
#include <stdio.h> #include <time.h> //gcc time_test.c -o time_test int main() {time_t n ...
- 关于Linux下的常用软件工具
目录 前言: vim gcc/gcc-c++ make/makefile gdb 写在最后 前言: 本篇主要介绍的是Linux下几种常用的软件的使用 关于Linux下软件的安装,yum源的配置请点击: ...
- Linux下的常用工具
1.Linux软件包管理工具 yum 首先我们先来了解一下什么是软件包,为什么需要管理? 1.在Linux下安装程序通常的办法是下载到程序的源代码,并且进行编译,得到可执行程序,但是这样太麻烦了,于是 ...
- linux下获取系统时间的方法
可以用 localtime 函数分别获取年月日时分秒的数值. Linux下获得系统时间的C语言的实现方法: 1. 可以用 localtime 函数分别获取年月日时分秒的数值. #include< ...
- linux常用调试,linux下gdb常用的调试命令
用gdb调试程序时,常常很困惑一些命令的使用,要么是不知道这个命令,要么忘了命令的使用方法.接下来是小编为大家收集的linux下gdb常用的调试命令,希望能帮到大家. linux下gdb常用的调试命令 ...
- php时间转两位数年份,PHP常用时间函数资料整理
PHP常用时间函数资料整理 PHP是一种HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言.这篇文章主要介绍了PHP常用时间函数资料整理的相关资料,需要的朋友可以参考下. php ...
- PHP常用时间函数总结
PHP常用时间函数总结: time time - 返回当前的 Unix 时间戳 说明 int time ( void ) 返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:0 ...
- MySQL常用时间函数
本文转自:http://www.2cto.com/database/201307/230943.html MySQL常用时间函数 1.1 获得当前日期+时间(date + time)函数:now() ...
- linux下文件访问时间、修改时间、更改时间
基本概念: linux对每个文件维护3个时间段(访问时间.修改时间.更改时间),它们的意义于图4-19中. 在linux下没有创建时间的概念,也就是不能知道文件的建立时间,但如果文件建立后就没有修改过 ...
最新文章
- 使用Fiddler抓取手机HTTP流量包
- 一些知识点的初步理解_4(协方差矩阵,ing...)
- 是什么_什么是模电,什么是数电
- C#反编译工具Reflector使用方法
- C#使用ICSharpCode.SharpZipLib压缩后进行web批量下载文件
- Liferay 用PortletSession 实现不同Liferay之间通讯
- 可视化图形(三):折线/曲线图-plot()
- Network | DNS
- 学习使用SQL Server日期函数
- mysql取系统当前时间的函数
- SQLite设计与概念
- 帆软报表跨域之插件开发中Controller中定义的方法实现CROS的GET跨域,且请求头带自定义属性
- Mysql数据库InnoDB存储引擎的隔离级别
- JAVA程序设计的一次作业
- java网络蜘蛛_基于java网络蜘蛛程序
- 《码出高效-阿里巴巴Java开发手册-泰山版》阿里最新出品的泰山版Java开发手册,告别垃圾代码
- Android 项目必备(三十二)-->APP 项目产品介绍
- 加拿大高中计算机课,全面解析加拿大高中课程
- 国内人工智能行业发展现状
- 李少白讲摄影-不放过一切光线 地坛书市新书首发圆满结束
热门文章
- linux 输出到文件 新,如何在Linux中将命令输出保存到文件
- Maven将jar包install到本地仓库deploy到远程仓库命令
- python3集合(set)
- java的interface_java中如何实现一个接口interface-百度经验
- java设计模式—单例模式
- mysql where 大小写_java – 使用select where where Mysql在Mysql中区分大小写
- ol+天地图+geoserver_GeoServer的WMS服务加载到天地图
- bat小工具_字节跳动收购效率工具幕布,张一鸣的 To B 野心 | 36氪独家
- java按键修改_修改键位映射,打造自己的个性键盘 [转自赵翔鹏的Blog]
- netty 多个 本地udp端口_如何在SpringBoot中,使用Netty实现远程调用?