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 _TIMESPECstruct timespec{time_t tv_sec; // secondslong 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(1970-1-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[16];char buf2[64];time(&t);tmp = localtime(&t);if (strftime(buf1, 16, "time and date: %r, %a %b %d, %Y",tmp) == 0)printf("buffer1 length is too small\n");elseprintf("%s\n",buf1);if (strftime(buf2, 64, "time and date: %r, %a %b %d, %Y",tmp) == 0)printf("buffer2 length is too small\n");elseprintf("%s\n",buf2);return 0; }
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(2000); //延迟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(2000); i=clock(); Sleep(2000); 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
转载于:https://www.cnblogs.com/tianzeng/p/9194851.html
time函数及其用法相关推荐
- 关于C语言中的malloc和free函数的用法
一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...
- Python assert断言函数及用法
Python assert断言函数及用法 Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行:反之,Pyt ...
- python中的counter()、elements()、most_common()和subtract()函数的用法
python中的counter().elements().most_common()和subtract()函数的用法 counter()方法: class collections.Counter([i ...
- Java正则表达式--Matcher.group函数的用法
https://www.cnblogs.com/jiafuwei/p/6080984.html Java正则表达式--Matcher.group函数的用法 原来,group是针对()来说的,group ...
- MapInfo中常用查询函数及用法
MapInfo中常用查询函数及用法: 函数用途 语法 备注 图层中选点 Str$(obj)="point": Str(String)表示字符串:point表示点: 图层中选线 St ...
- Oracle trunc()函数的用法
--Oracle trunc()函数的用法 /**************日期********************/ 1.select trunc(sysdate) from dual --20 ...
- php error log 函数,php日志函数error_log如何使用 php日志函数error_log用法介绍
php日志函数error_log如何使用?这篇文章主要介绍了php日志函数error_log用法,结合实例形式分析了php日志函数error_log相关的配置文件设置.函数功能.用法与使用注意事项,需 ...
- Python中的map()函数和reduce()函数的用法
Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下
- php函数find的用法,c语言find函数的用法详解
c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...
- python字符串find函数-python字符串查找函数的用法详解
python字符串查找函数的使用 打开Python开发工具IDLE,新建"findstr.py'文件,并写代码如下: s ='/ab/bx,.s' print (s.find('/x')) ...
最新文章
- Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小、自定义不同分组的气泡的色彩
- 计算两个日期相差几年几个月
- python中format函数用法简书_Python 中format 的用法
- JS - Class继承
- SAP中国,在中国,为中国,一些包含了SAP logo的NBA运动套装
- C++堆和栈详解(转)
- ios开发 mvp实践_实践中开发人员的工作流程-我们如何在30天内建立​​MVP
- 一台linux上运行多个mysql_linux下同时运行多个mysql
- PHP多种形式发送邮件
- 构建linux内核源码树
- AcWing 827. 双链表
- 视频教程-OCJP认证考试复习课-其他
- 阿里巴巴Java开发手册(终极版)
- 玩转 ESP32 + Arduino (十九) SIM800L调试(基于TTGO T-CALL)
- 程 | 深度学习 + OpenCV,Python 实现实时视频目标检测 机器之心 09-21
- 最详细的Log4j使用教程
- 如何用ABBYY FineReader提取图片中的文字
- 基于springboot的员工管理系统整合Mybatis操作
- 点选识别DLL/滑块识别DLL/通用验证码识别DLL/图标点选/本地识别DLL
- 力扣—— 19. 删除链表的倒数第 N 个结点(java)、剑指 Offer 22. 链表中倒数第k个节点(java)
热门文章
- 117.滑动窗口协议
- 苹果市值盘中超2万亿美元,从1万亿到2万亿仅用时2年
- 马斯克发推警告:高级AI将操纵社交媒体,或引发第三次世界大战
- java jar log4j_java项目打包成可执行jar用log4j将日志写在jar所在目录操作
- ios linux时间戳转时间,将UNIX时间戳转换为数据 – iOS
- oracle10.2.0.5漏洞,Oracle 10.2.0.5 opatch报错
- java后期发展方向_2020年前3季度工程自卸车市场咋样?后期朝啥方向发展?
- request和response的setCharacterEncoding()方法
- java中的线程安全是什么?
- mysql自增变量插入行时需要赋值