time函数及其用法
st_atime:文件中的数据最后被访问的时间
Time when file data was last accessed. Changed by the
following functions: creat(), mknod(), pipe(),
utime(2), and read(2).
st_mtime:文件中的内容最后修改时间
Time when data was last modified. Changed by the fol-
lowing functions: creat(), mknod(), pipe(), utime(),
and write(2).
st_ctime:文件的所有者,所属的组,链接数,权限最后发生改变的时间
Time when file status was last changed. Changed by the
following functions: chmod(), chown(), creat(),
link(2), mknod(), pipe(), unlink(2), utime(), and
write().
一:结构体的定义
1、time_t
typedef long time_t; /* time value */
2.struct timespec
typedef long time_t;
#ifndef _TIMESPEC
#define _TIMESPEC
struct timespec
{
time_t tv_sec; // seconds
long tv_nsec; // and nanoseconds
};
#endif
struct timespec有两个成员,一个是秒,一个是纳秒, 所以最高精确度是纳秒。
一般由函数int clock_gettime(clockid_t, struct timespec *)获取特定时钟的时间,常用如下4种时钟:
- CLOCK_REALTIME 统当前时间,从1970年1.1日算起
- CLOCK_MONOTONIC 系统的启动时间,不能被设置
- CLOCK_PROCESS_CPUTIME_ID 本进程运行时间
- CLOCK_THREAD_CPUTIME_ID 本线程运行时间
struct tm *localtime(const time_t *clock); //线程不安全
struct tm* localtime_r( const time_t* timer, struct tm* result );//线程安全
size_t strftime (char* ptr, size_t maxsize, const char* format,const struct tm* timeptr );
3.timeval
timeval是一个结构体,在time.h中定义为:
struct timeval
{
__time_t tv_sec; /* Seconds. */
__suseconds_t tv_usec; /* Microseconds. */
};
其中,tv_sec为Epoch(--1零点零分)到创建struct timeval时的秒数,tv_usec为微秒数,即秒后面的零头。
4.tm
struct tm
{
int tm_sec; /*代表目前秒数,正常范围为0-59,但允许至61秒 */
int tm_min; /*代表目前分数,范围0-59*/
int tm_hour; /* 从午夜算起的时数,范围为0-23 */
int tm_mday; /* 目前月份的日数,范围01-31 */
int tm_mon; /*代表目前月份,从一月算起,范围从0-11 */
int tm_year; /*从1900 年算起至今的年数*/
int tm_wday; /* 一星期的日数,从星期一算起,范围为0-6。*/
int tm_yday; /* Days in year.[0-365] */
int tm_isdst; /*日光节约时间的旗标DST. [-1/0/1]*/
};
二:函数的具体操作

time()
time_t time(time_t * timer)
clock_gettime()
#include <sys/time.h>
int clock_gettime(clockid_t clock_id, struct timespec *tsp);
//返回值:若成功,返回0;若出错,返回-1
clock_settime()
要对特定的时钟设置时间,可以调用clock_settime函数。
#include <sys/time.h>
int clock_settime(clockid_t clock_id, const struct timespec *tsp);
//返回值:若成功,返回0;若出错,返回-1
gettimeofday
需要适当的权限来更改时钟值,打哪会有些时钟是不能修改的。
#include <sys/time.h>
int gettimeofday(struct timeval *restrict tp, void *restrict tzp);
//返回值:总是返回0
tzp的唯一合法值是NULL,其他值将产生不确定的结果。gettimeofday函数以距特定时间(1970年1月1日00:00:00)的秒数的方式将当前时间存放在tp指向的timeval结构中,而该结构将当前时间表示为秒和微秒。
localtime和gmtime
#include <time.h>
struct tm *gmtime(const time_t *calptr);
struct tm *localtime(const time_t *calptr);
//返回值:指向分解的tm结构的指针;若出错,返回NULL
两个函数localtime和gmtime将日历时间转换成分解的时间,并将这些存放在一个tm结构中。
localtime()和gmtime()的区别:
localtime_r()和gmtime_r()函数
struct tm *gmtime_r(const time_t *timep, struct tm *result);
struct tm *localtime_r(const time_t *timep, struct tm *result);
localtime_r()函数功能与此相同,但是它可以将数据存储到用户提供的结构体中。它不需要设置tzname。
一个好的方法是使用gmtime_r和localtime_r,由于使用了用户分配的内存,这两个函数是不会出错的。
mktime()
函数mktime以本地时间的年、月、日等作为参数,将其变换成time_t值。
#include <time.h>
time_t mktime(struct tm *tmptr);
//返回值:若成功,返回日历时间;若出错,返回-1
strftime
size_t strftime(char *restrict buf, size_t maxsize, const char *restrict format, const struct tm *restrict tmptr);
size_t strftime_l(char *restrict buf, size_t maxsize,const char *restrict format, const struct tm *restrict tmptr, locale_t locale);
//返回值:若有空间,返回存入数组的字节数;否则,返回0
格式化结果存放在一个长度为maxsize个字符的buf数组中,如果buf长度足以存放格式化结果及一个null终止符,则返回在buf中存放的字节数;否则返回0。
format参数控制时间值的格式。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
time_t t;
struct tm *tmp;
char buf1[];
char buf2[]; time(&t);
tmp = localtime(&t);
if (strftime(buf1, , "time and date: %r, %a %b %d, %Y",tmp) == )
printf("buffer1 length is too small\n");
else
printf("%s\n",buf1); if (strftime(buf2, , "time and date: %r, %a %b %d, %Y",tmp) == )
printf("buffer2 length is too small\n");
else
printf("%s\n",buf2);
return ;
}
strptime
是strftime函数反过来的版本,把字符串时间转换成分解时间。
#include <time.h>
char *strptime(const char *restrict buf, const char *restrict format, struct tm *restrict tmptr);
//返回值:指向上次解析的字符的下一个字符的指针;否则,返回NULL
format参数给出了buf参数指向的缓冲区的字符串的格式。虽然与strftime函数的说明稍有不同,但是格式说明是类似的。

asctime()函数
功 能: 转换日期和时间为相应的字符串(英文简写形式,形如:Mon Feb 16 11:29:26 2009)
ctime()函数
函数返回的const char *末尾有一个\n(换行符)。man手册给出ctime()说明: It converts the calendar time t into a null-terminated string of the form;"Wed Jun 30 21:49:08 1993\n"
而asctime是通过tm结构来生成时间字符串。
difftime()函数
这是由它的参数决定的。
三:sleep usleep clock
1..Sleep函数(不同平台、编译器之间可能函数名,函数参数单位不一样)
头文件:#include<windows.h>
定义函数:unsigned sleep(unsigned seconds);
函数说明:此函数执行挂起一段时间。
example:(对于windows+codeblocks下,Sleep(),单位为ms)
#include<stdio.h>
#include<windows.h>
main()
{
int i,j;
i=time((time_t*)NULL);
Sleep(); //延迟2s
j=time((time_t*)NULL);
printf("延时了%d秒",j-i);
}
2.clock函数
函数定义:clock_t clock(void) ;
函数说明:该程序从启动到函数调用占用CPU的时间。
example:
#include<stdio.h>
#include<windows.h>
main()
{
int i,j;
Sleep();
i=clock();
Sleep();
j=clock();
printf("开始%d\n结束%d\n经过%d\n",i,j,j-i);
}
3. usleep
头文件: #include <unistd.h>
功 能: usleep功能把进程挂起一段时间, 单位是微秒(百万分之一秒);
语 法: void usleep(int micro_seconds);
返回值: 无
内容说明:本函数可暂时使程序停止执行。参数 micro_seconds 为要暂停的微秒数(us)。
注 意:
这个函数不能工作在windows 操作系统中。用在Linux的测试环境下面。
参 见:usleep() 与sleep()类似,用于延迟挂起进程。进程被挂起放到reday queue。
是一般情况下,延迟时间数量级是秒的时候,尽可能使用sleep()函数。
如果延迟时间为几十毫秒(1ms = 1000us),或者更小,尽可能使用usleep()函数。这样才能最佳的利用CPU时间
时钟换算:
微秒,时间单位,符号us(英语:microsecond ).
1微秒等于百万分之一秒(10的负6 次方秒)
0.000 001 微秒 = 1皮秒
0.001 微秒 = 1纳秒
1,000 微秒 = 1毫秒
1,000,000 微秒 = 1秒
1s = 1000ms
1ms = 1000μs
1μs = 1000ns
1ns = 1000ps
time函数及其用法的更多相关文章
- 有关日期的函数操作用法总结,to_date(),trunc(),add_months();
相关知识链接: Oracle trunc()函数的用法 oracle add_months函数 Oracle日期格式转换,tochar(),todate() №2:取得当前日期是一个星期中的第几天,注 ...
- Oracle to_date()函数的用法
Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...
- js中bind、call、apply函数的用法
最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站.但 ...
- Oracle trunc()函数的用法
Oracle trunc()函数的用法 /**************日期********************/1.select trunc(sysdate) from dual --2013-0 ...
- freemarker内置函数和用法
原文链接:http://www.iteye.com/topic/908500 在我们应用Freemarker 过程中,经常会操作例如字符串,数字,集合等,却不清楚Freemrker 有没有类似于Jav ...
- matlab中patch函数的用法
http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...
- JavaScript中常见的数组操作函数及用法
JavaScript中常见的数组操作函数及用法 昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下 ...
- JavaScript中常见的字符串操作函数及用法
JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...
- oracle的substr函数的用法
oracle的substr函数的用法 取得字符串中指定起始位置和长度的字符串 substr( string, start_position, [ length ] ) 如: substr( ...
- java String.split()函数的用法分析
java String.split()函数的用法分析 栏目:Java基础 作者:admin 日期:2015-04-06 评论:0 点击: 3,195 次 在java.lang包中有String.spl ...
随机推荐
- struts2中的错误--java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
2013-4-7 10:13:56 org.apache.catalina.startup.HostConfig checkResources 信息: Reloading context [/chap ...
- python webdriver 测试框架-数据驱动xml驱动方式
数据驱动xml驱动的方式 存数据的xml文件:TestData.xml: <?xml version="1.0" encoding="utf-8"?> ...
- 【运维技术】slc pm 启动不了,异常排除问题记录
问题描述 slc pm 启动的时候报错如下: [root@iZuf61qpjpeuqc5mjo4kn8Z lixiang-scf-web]# slc pm strong-remoting deprec ...
- SQL学习笔记八之ORM框架SQLAlchemy
阅读目录 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进 ...
- linux及安全第七周总结——20135227黄晓妍
实验部分 首先clone最新的menu 我们可以看到,test.c里多了一个exec的功能,它的代码和fork基本一致,多了一项加载hello rootfs也有一些变化 执行一下exec 让我们启动一 ...
- 20135302魏静静——Linux课程期中总结
Linux期中总结 Linux课程第一周实验及总结:[http://www.cnblogs.com/20135302wei/p/5218607.html] 冯诺依曼体系结构的核心思想是存储程序计算机. ...
- 「翻译」一篇redis文章引发的翻译——JVM能支持多少线程?
昨天看了一篇关于redis 的文章https://www.cnblogs.com/fanwencong/p/5782860.html 作者说他模拟了100万线程的并发,我对这个有一些怀疑,看了评论也有 ...
- ccf 行车路线
问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...
- XML_CPP_资料_libXml2_01
ZC: 看了一些 C/C++的XML文章,也看了一些 Qt的 QXmlQuery/QXmlSimpleReader/QXmlStreamReader/QXmlStreamWriter 的文章.总体感觉 ...
- 代码注释,神兽护体,代码无bug
/** * * ━━━━━━神兽出没━━━━━━ * ┏┓ ┏┓ * ┏┛┻━━━┛┻┓ * ┃ ┃ * ┃ ━ ┃ * ┃ ┳┛ ┗┳ ┃ * ┃ ┃ * ┃ ┻ ┃ * ┃ ┃ * ┗━┓ ┏━┛ ...