关于Linux下时间编程的问题:

1. Linux下与时间有关的结构体

struct timeval

{

int tv_sec;

int tv_usec;

};

其中tv_sec是由凌晨开始算起的秒数,tv_usec则是微秒(10E-6 second)。

struct timezone

{

int tv_minuteswest;

int tv_dsttime;

};

tv_minuteswest是格林威治时间往西方的时差,tv_dsttime则是时间的修正方式。

struct timespec

{

long int tv_sec;

long int tv_nsec;

};

tv_nsec是nano second(10E-9 second)。

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;

};

tm_sec表「秒」数,在[0,61]之间,多出来的两秒是用来处理跳秒问题用的。

tm_min表「分」数,在[0,59]之间。

tm_hour表「时」数,在[0,23]之间。

tm_mday表「本月第几日」,在[1,31]之间。

tm_mon表「本年第几月」,在[0,11]之间。

tm_year要加1900表示那一年。

tm_wday表「本第几日」,在[0,6]之间。

tm_yday表「本年第几日」,在[0,365]之间,闰年有366日。

tm_isdst表是否为「日光节约时间」。

struct itimerval

{

struct timeval it_interval;

struct timeval it_value;

};

it_interval成员表示间隔计数器的初始值,而it_value成员表示间隔计数器的当前值。

2.获得当前时间

在所有的UNIX下,都有个time()的函数

time_t time(time_t *t);

这个函数会传回从epoch开始计算起的秒数,如果t是non-null,它将会把时间值填入t中。

对某些需要较高精准度的需求,Linux提供了gettimeofday()。

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

int settimeofday(const struct timeval * tv,const struct timezone *tz);

struct tm格式时间函数

struct tm * gmtime(const time_t * t);

转换成格林威治时间。有时称为GMT或UTC。

struct tm * localtime(const time_t *t);

转换成本地时间。它可以透过修改TZ环境变数来在一台机器中,不同使用者表示不同时间。

time_t mktime(struct tm *tp);

转换tm成为time_t格式,使用本地时间。

tme_t timegm(strut tm *tp);

转换tm成为time_t格式,使用UTC时间。

double difftime(time_t t2,time_t t1);

计算秒差。

3.文字时间格式函数

char * asctime(struct tm *tp);

char * ctime(struct tm *tp);

这两个函数都转换时间格式为标准UNIX时间格式。

Mon May 3 08:23:35 1999

ctime一率使用当地时间,asctime则用tm结构内的timezone资讯来表示。

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

下面举一个小例子,说明如何获得系统当前时间:

time_t now;

struct tm *timenow;

char strtemp[255];

time(&now);

timenow = localtime(&now);

printf("recent time is : %s ", asctime(timenow))

Linux时间结构体和获得时间函数的更多相关文章

  1. Go结构体实现类似成员函数机制

    Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...

  2. (60) 结构体指针、结构体变量嵌套、结构体指针嵌套、函数指针、数组指针、指针数组、typedef 综合运用

    #include<stdio.h> #include<iostream> #include<malloc.h> /* author : 吴永聪 program: 结 ...

  3. C语言中的系统时间结构体类型

    在C语言涉及中经常需要定时触发事件,涉及到获取系统时间,其结构体类型有多种.Unix/Linux系统下有以下几种时间结构: 1.time_t 类型:长整型,一般用来表示从1970-01-01 00:0 ...

  4. C# 篇基础知识2——运算符、类型转换、流程控制、枚举、结构体和数组、函数

    1.运算符.类型转换 计算某年y某月m某日d是周几的基姆拉尔森公式公式:int week = (d + 2*m + 3*(m + 1)/5 + y + y/4 - y/100 + y/400 + 1) ...

  5. linux kernel 结构体赋值方法{转载}

    原文地址: http://www.chineselinuxuniversity.net/articles/48226.shtml 这几天看Linux的内核源码,突然看到init_pid_ns这个结构体 ...

  6. c语言指向结构体的指针作为函数参数

    注意 这里包括形参和实参 struct dangdangtest { ]; int num; }; void change(int num)//值传递 新建一个变量接受传递的值 { num = ; } ...

  7. 在C语言结构体中添加成员函数

    我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结 ...

  8. linux中结构体对齐【转】

    转自:https://blog.csdn.net/suifengpiao_2011/article/details/47260085 linux中定义对齐字节 typedef struct  sdk_ ...

  9. Linux C 结构体初始化三种形式

    最近看linux代码时发现了结构体 struct 一种新的初始化方式,各方查找对比后总结如下: 1. 顺序初始化教科书上讲C语言结构体初始化是按照顺序方式来讲的,没有涉及到乱序的方式.顺序初始化str ...

随机推荐

  1. 【刷题】BZOJ 1211 [HNOI2004]树的计数

    Description 一个有n个结点的树,设它的结点分别为v1, v2, -, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, -, dn,编程需要 ...

  2. 【BZOJ3667】Rabin-Miller算法(Pollard_rho)

    [BZOJ3667]Rabin-Miller算法(Pollard_rho) 题面 呜,权限题,别问我是怎么做的(我肯定没有权限号啊) 第一行:CAS,代表数据组数(不大于350),以下CAS行,每行一 ...

  3. Unity3D手游开发日记(4) - 适合移动平台的热浪扭曲

    热浪扭曲效果的实现,分两部分,一是抓图,二是扭曲扰动.其中难点在于抓图的处理,网上的解决方案有两种,在移动平台都有很多问题,只好自己实现了一种新的方案,效果还不错. 网上方案1. 用GrabPass抓 ...

  4. Jenkins远程代码执行漏洞检查(CVE-2017-1000353)

    Jenkins的反序列化漏洞,攻击者使用该漏洞可以在被攻击服务器执行任意代码,漏洞利用不需要任何的权限 漏洞影响范围: 所有Jenkins主版本均受到影响(包括<=2.56版本)所有Jenkin ...

  5. luoguP5105 不强制在线的动态快速排序

    emm 可重集合没用用.直接变成不可重复集合 有若干个区间 每个区间形如[L,R] [L,R]计算的话,就是若干个连续奇数的和.拆位统计1的个数 平衡树维护 加入一个[L,R],把相交的区间合并.之后 ...

  6. 关于Linux运维的一些题目总结

    一.有文件file1 1.查询file1里面空行的所在行号 awk ‘{if($0~/^$/)print NR}’ fileorgrep -n ^$ file |awk ‘BEGIN{FS=”:”}{ ...

  7. Excel公式

    多个IF =IF(ISNUMBER(SEARCH("lz",E7)),"lz", IF(ISNUMBER(SEARCH("zch",E7)) ...

  8. bzoj 1367: [Baltic2004]sequence

    1367: [Baltic2004]sequence Time Limit: 20 Sec  Memory Limit: 64 MB Description Input Output 一个整数R Sa ...

  9. js写弹窗

    1.先来看弹窗的模样 点击“弹出窗口”后会弹出下面窗口 2.下面是实现弹出窗口的代码,其中引入的jquery一般自己有,没有的话可以从网上下载.tanchuang.js和tanchuang.css写在 ...

  10. Docker 配置国内镜像拉取中心,Configure docker to use faster registries in China.

    Networking in China is really bad when it comes to using some cloud based tools like docker, it's us ...