在C语言涉及中经常需要定时触发事件,涉及到获取系统时间,其结构体类型有多种。Unix/Linux系统下有以下几种时间结构:

1、time_t 类型:长整型,一般用来表示从1970-01-01 00:00:00时以来的秒数,精确度:秒;由函数time()获取;

该类型定义在头文件 /usr/include/sys/time.h 中:

#define _TIME_T
       typedef   long   time_t;        
     #endif

函数定义:time_t   time(time_t*  lpt);

如:time_t   time = time(NULL);

2、struct timeb 结构:它有两个主要成员,一个是秒,另一个是毫秒;精确度:毫秒(10E-3秒);

由函数ftime()获取struct timeb结构的时间;其定义如下:

struct timeb

{
        time_t  time;                     
        unsigned short millitm;    
        short   timezone;             
        short   dstflag;                
      };

#include

int  ftime(struct  timeb*  tp);

调用成功返回0;调用失败返回-1;

3、struct  timeval 结构,它有两个成员;一个是秒,另一个表示微秒,精确度:微秒(10E-6);

由函数gettime0fday()获取;

struct  timeval结构定义为:

struct  timeval

{

long  tv_sec;

long  tv_usec;

}

读取struct timeval结构数据的函数说明:

#include  
      int  gettimeofday(struct  timeval*  tv,struct  timezone*  tz);

该函数会提取系统当前时间,并把时间分为秒和微秒两部分填充到结构struct  timeval中;同时把当地的时区信

息填充到结构struct  timezone中;

返回值:成功则返回0,失败返回-1,错误代码存于errno。附加说明EFAULT指针tv和tz所指的内存空间超出存

取权限。

struct  timezone结构的定义为:

struct  timezone

{

int  tz_minuteswest; 
         int  tz_dsttime;

}

上述两个结构都定义在/usr/include/sys/time.h。tz_dsttime 所代表的状态如下
      DST_NONE
      DST_USA
      DST_AUST
      DST_WET
      DST_MET  
      DST_EET
      DST_CAN
      DST_GB
      DST_RUM
      DST_TUR
      DST_AUSTALT

4、struct  timespec 结构:它是POSIX.4标准定义的一个时间结构,精确度:纳秒(10E-9秒);

由函数gethrestime()或gethrestime_lasttick()获取当前系统struct  timespec结构的时间;其定义如下:

struct  timespec

{

time_t    tv_sec;

long       tv_nsec;

};

typedef   struct  timespec   timespec_t;

该结构定义在头头文件 /usr/include/sys/time_impl.h 中;

extern   void   gethrestime(timespec_t*);
     extern   void   gethrestime_lasttick(timespec_t*);

5、clock_t 类型:由函数clock()获取;

#include

clock_t   clock(void);

该函数以微秒的方式返回CPU的时间;

类型 clock_t 定义在头文件/usr/include/sys/types.h中:

#ifndef _CLOCK_T
     #define _CLOCK_T
      typedef    long   clock_t;
     #endif

6、struct  tm 结构:由函数gmtime()解析time_t得到

struct tm*gmtime(const time_t*timep);
      函数说明:gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后

将结果由结构tm返回。
      结构tm的定义为
      struct tm
      {
         int   tm_sec;
         int   tm_min;
         int   tm_hour;
         int   tm_mday;
         int   tm_mon;
         int   tm_year; 
         int   tm_wday;
         int   tm_yday; 
         int tm_isdst;
      };
      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 从今年1月1日算起至今的天数,范围为0-365
      int   tm_isdst 日光节约时间的旗标
      此函数返回的时间日期未经时区转换,而是UTC时间。
      返回值:返回结构tm代表目前UTC 时间

7、Unix对时间单位的定义:

#define SEC                1                        // 秒
     #define MILLISEC        1000                  // 毫秒
     #define MICROSEC     1000000            // 微秒
     #define NANOSEC       1000000000      // 纳秒

8、时间格式化函数:

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 : 时区名称的缩写
     %% : %符号

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 : 读取四位数年份

C语言中的系统时间结构体类型的更多相关文章

  1. C语言中内存对齐与结构体

    结构体 结构体是一种新的数据类型,对C语言的数据类型进行了极大的扩充. struct STU{ int age; char name[15]; }; struct STU a; //结构体实例 str ...

  2. OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改

    OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改,需要对OC对象的结构体属性整体赋值. 关于网上很多博客写着“结构体类型里面的某个属性如果想要修改是不允许单个修改的” 之解释: ...

  3. 菜鸟学习-C语言函数参数传递详解-结构体与数组 分类: C/C++ Nginx 2015-07-14 10:24 89人阅读 评论(0) 收藏

    C语言中结构体作为函数参数,有两种方式:传值和传址. 1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数.在这种情况下 ...

  4. C语言入门(15)——结构体与数据抽象

    大多数的计算机运算是对现实世界的模拟,如果想用计算机来模拟现实世界需要用到数据抽象的方法.所谓抽象是从实际的人.物.事和概念中抽取所关心的共同特征,,忽略非本质的细节,吧这些特征用各种概念精确的加以描 ...

  5. 智能合约语言 Solidity 教程系列6 - 结构体与映射

    写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 本系列文章一部分是参考Solidity官方文档(当前最新版 ...

  6. C语言-06复杂数据类型-04 结构体

    结构体的说明(构造类型) 数组:只能由多个相同类型的数据构成 结构体:可以由多个不同类型的数据构成 ,结构体的类型是不存在的,自己定义 int main() { // 1.定义结构体类型 定义类型的时 ...

  7. C语言入门(14)——结构体

    整数.字符.布尔值.浮点数这些数据类型都具有单一的值,这些可称为基本数据类型.但字符串是一个例外,它由很多字符组成,像这种由基本类型组成的数据类型称为复合数据类型,正如表达式和语句有组合规则一样,由基 ...

  8. C语言博客作业06——结构体&文件

    C语言博客作业06--结构体&文件 1.本章学习总结 1.1思维导图 1.2.本章学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.结构体的本身并不难,但以结构体为基础的链表还是让我 ...

  9. Go语言规格说明书 之 结构体类型(Struct types)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...

随机推荐

  1. C语言中如何获得文件大小

    方法一: 获得文件大小需要用到2个函数:fseek() , ftell() fseek()函数: 原型:intfseek(FILE *stream, long offset, int fromwher ...

  2. 技巧两种:LINUX删除指定后缀文件及PYTHON更改屏幕字色

    http://blog.csdn.net/caryaliu/article/details/8753028 http://www.iitshare.com/python-print-color-log ...

  3. Cmake Error: your compiler "cl" was not Found .etc

    又是环境变量路径等问题,烦死人了. TIPS:请注意,控制台的窗口也有自己的环境变量,从系统环境变量和用户环境变量继承过来的,一个窗口(控制台)可以添加属于自己的环境变量(跟别的控制台窗口没关系) 解 ...

  4. IDEA 快捷键整理

    1. IDEA内存优化  \IntelliJ IDEA 9\bin\idea.exe.vmoptions ----------------------------------------- -Xms6 ...

  5. poj2752 Seek the Name, Seek the Fame

    Description The little cat is so famous, that many couples tramp over hill and dale to Byteland, and ...

  6. 15个提高编程技巧的JavaScript工具

    原文地址:http://www.imooc.com/wenda/detail/243523 JavaScript脚本库是一个预先用JavaScript语言写好的库,它方便了我们开发基于JavaScri ...

  7. Raid1源代码分析--读流程(重新整理)

    五.Raid1读流程分析 两个月前,刚刚接触raid1,就阅读了raid1读流程的代码,那个时候写了一篇博客.现在回过头看看,那篇的错误很多,并且很多地方没有表述清楚.所以还是决定重新写一篇以更正之前 ...

  8. URAL 1036

    题目大意:求前N位与后N位各个位和相等且总和等于S的2N位数的个数. KB     64bit IO Format:%I64d & %I64u 数据规模:1<=N<=50,0< ...

  9. c语言结构体数组定义的三种方式

    struct dangdang { ]; ]; ]; int num; int bugnum; ]; ]; double RMB; int dangdang;//成员名可以和类名同名 }ddd[];/ ...

  10. Entify Framewrok - LINQ简单使用

    1.如何使用Join: http://www.devcurry.com/2011/01/join-example-in-linq-and-c.html