linux c 时间处理,linux 或c 时间相关处理类型和函数

注意

1.精确级别,纳秒级别

原型

long  clock_gettime (clockid_t which_clock, struct timespec *tp);

头文件time.h

which_clock参数解释

CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户该成其他,则对应的时间相应改变

CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响

CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间

CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间

struct timespect *tp用来存储当前的时间,其结构如下:

1 struct timespec {

2 time_t tv_sec; /* seconds */

3 long tv_nsec; /* nanoseconds */

4 };

#include

#include

struct timespec diff(struct timespec start,struct timespec end)

{

struct timespec temp;

if((end.tv_nsec-start.tv_nsec)

{

temp.tv_sec = end.tv_sec-start.tv_sec-;

temp.tv_nsec = + end.tv_nsec-start.tv_nsec;

}

else

{

temp.tv_sec = end.tv_sec-start.tv_sec;

temp.tv_nsec = end.tv_nsec-start.tv_nsec;

}

return temp;

}

int main()

{

struct timespec time1,time2,temp;

int i;

clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);

for(i=; i

{

;

}

clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);

temp = diff(time1, time2);

printf("%d:%d\n", temp.tv_sec, temp.tv_nsec);

return ;

}

在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下:

#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()为负。*/

long int tm_gmtoff; /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/

const char *tm_zone; /*当前时区的名字(与环境变量TZ有关)*/

};

#define _TM_DEFINED

#endif

ANSI C标准称使用tm结构的这种时间表示为分解时间(broken-down time)。

可以使用的函数是gmtime()和localtime()将time()获得的日历时间time_t结构体转换成tm结构体。

其中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转化为本地时间。

#include

#include

int main()

{

struct tm *ptr;

time_t lt;

lt=time(NULL);

ptr=localtime(&lt);

printf("second:%d\n",ptr->tm_sec);

printf("hour:%d\n",ptr->tm_hour);

}

~

strftime,是一种计算机函数,strftime() 函数根据区域设置格式化本地时间/日期,函数的功能将时间格式化,或者说格式化一个时间字符串。

size_t strftime(

char *strDest,

size_t maxsize,

const char *format,

const  struct tm *timeptr

);

而下面的程序则显示当前的完整日期:

#include

#include

int main()

{

struct tm* newtime;

char tmp[];

time_t lt1;

time(&lt1);

newtime=localtime(&lt1);

strftime(tmp,,"today is %A,day %d of $B in the year %Y.\n",newtime);

printf("%s\n",tmp);

}

struct tm *ttime;

char now[];

time_t tt;

memset(now, , );

tt = time(NULL);

ttime = localtime(&tt);

strftime(now, , "%Y-%m-%d %H:%M:%S", ttime);

clock函数使用:

计算持续时间的长度

有时候在实际应用中要计算一个事件持续的时间长度,比如计算打字速度。在第1节计时部分中,我已经用clock函数举了一个例子。Clock()函数可以精确到毫秒级。同时,我们也可以使用difftime()函数,但它只能精确到秒。该函数的定义如下:

double difftime(time_t time1, time_t time0);

虽然该函数返回的以秒计算的时间间隔是double类型的,但这并不说明该时间具有同double一样的精确度,这是由它的参数觉得的(time_t是以秒为单位计算的)。

更多:

struct itimerval {

struct timeval it_interval;

struct timeval it_value;

}

Linux下C语言编程实现spwd函数

Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...

Linux中用st_mode判断文件类型

Linux中用st_mode判断文件类型 2012-12-11 12:41 14214人阅读 评论(4) 收藏 举报  分类: Linux(8)  C/C++(20)  版权声明:本文为博主原创文章, ...

jdbc 日期时间相关的类型

jdbc 日期时间相关的类型 1.sql.Date sql包中的日期类Date是util包中Date类的子类,实际上也是util.Date类的子集.它只处理年月日,而忽略小时和分秒,用以代表SQL的D ...

Linux下编译C代码,出现tan函数报错的情况

undefined reference to `tan' 但是已经包含了头文件 了,可还是报错,说是找不到tan 这个问题的原因不是很清楚, 但是网上给出的方案,就是编译的 ...

(笔记)Linux内核中内存相关的操作函数

linux内核中内存相关的操作函数 1.kmalloc()/kfree() static __always_inline void *kmalloc(size_t size, gfp_t flags) ...

Linux内核接口特定的类型

内核中一些通常使用的数据类型有它们自己的 typedef 语句, 因此阻止了任何移植性问 题. 例如, 一个进程标识符 ( pid ) 常常是 pid_t 而不是 int. 使用 pid_t 屏蔽了任 ...

[笔记]linux下和windows下的 创建线程函数

linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include #define CreateThreadEx(ti ...

YUI的类型判断函数

1.首先定义一个关于类型的对象,及相关变量 类型判断对象 ar L = Y.Lang || (Y.Lang = {}), STRING_PROTO = String.prototype, TOSTRI ...

随机推荐

移动web开发—页面头部 META 总结

meta指元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. 标签位于文档的头部,不包含任何内容. 标签的属性定义了与文档相关联的名称/值对. ...

Oracle的优化器介绍

Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...

ABAP 数据字典中的参考表和参考字段的作用

ABAP数据字典中的参考表和参考字段的作用 大家最初在SE11中创建表和结构的时候都会遇到一个问题,如果设定了某个字段为QUAN或者CURR类型,也就是数量或金额的时候,总会要求输入一个参考 ...

NodeJS:树的反序列化

!!不知问啥,cnblog的MarkDown编辑器不好使了. 本文也在我的博客edwardesire.com上,欢迎品尝. 树的反序列化就是将序列数组安装线索组成树结构,今次项目数据库存储决策节点的方 ...

Centos6.4安装JDK

链接地址:http://www.iteye.com/topic/1130311 1.先看看OpenJDK的安装包 $ rpm -qa |grep javatzdata-java-2013b-1.el6 ...

SVG的a链接

SVG的a链接:

mysql常用的操作

数据库的常用操作:create database db1; #创建数据库show databases; #查看所有数据库show create database db1;#查看创建的指定数据库alte ...

Alpha冲刺集合

Alpha冲刺集合 Day1 http://www.cnblogs.com/bugLoser/p/7901016.html Day2 http://www.cnblogs.com/bugLoser/p ...

jdbc连接sql数据库

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值