linux下的时间函数

Linux下的时间函数,写在这里,可以在大多数时候满足要求。

一、time函数

#include <time.h>

 

time_t time(time_t *t);

 

首先要用到的就是time函数了,用来获取系统时间。当然获取的时间是一个秒数而已,此时还不大实用。

man手册中提到Epoch,这个Epoch指的是一个特定的时间:1970-01-01 00:00:00 UTC。这个描述就是从这个时间开始的秒数。这个秒数叫做unix时间戳。一个小时3600秒,一天86400秒,闰秒不计算。

如果时间戳的存储为32位,就会引发2038年问题(Y2038)

函数使用方法:

 

time_t tp;

time(&tp);

 

该函数有返回值,也是秒数。

 

 

二、时间转换函数

Linux中提供的转换函数还是不少的,这里就有必要说下 struct tm 这个结构体了。Man手册里就有很详细的介绍:

 struct tm {

               int tm_sec;         /* seconds */

               int tm_min;         /* minutes */

               int tm_hour;        /* hours */

               int tm_mday;        /* day of the month */

               int tm_mon;         /* month */

               int tm_year;        /* year */

               int tm_wday;        /* day of the week */

               int tm_yday;        /* day in the year */

               int tm_isdst;       /* daylight saving time */

           };

 

结构体成员介绍如下:

tm_sec取值范围059,到达60时分钟跳转

tm_min取值范围059

tm_hour 取值范围023

tm_mday 取值范围131

tm_mon 取值范围011,所以实际计算时需要加1

tm_year 距离1900年的年数,所以实际计算时需要加1900

tm_isdst 有关夏令时的设置,国内一般不用,因为我们没实行

下面是关于时间转换的一些函数。

使用时首先需要将time_t类型的秒数转换成结构体形式,gmtimelocaltime有此作用

Asctimectime是将结构体形式的时间再转换为一定格式的字符串,不过大多时候我们都自己定制了字符串的格式。

需要说明的是,加了_r后缀的函数与原函数的区别。没加_r的函数tm结构体是静态变量,所以重复调用会导致覆盖,而_r的函数则需要调用者来保存这个结构体,不存在这个问题。

 

 #include <time.h>

 

 char *asctime(const struct tm *tm);

 char *asctime_r(const struct tm *tm, char *buf);

 

 char *ctime(const time_t *timep);

 char *ctime_r(const time_t *timep, char *buf);

 

 struct tm *gmtime(const time_t *timep);

 struct tm *gmtime_r(const time_t *timep, struct tm *result);

 

 struct tm *localtime(const time_t *timep);

 struct tm *localtime_r(const time_t *timep, struct tm *result);

 

 time_t mktime(struct tm *tm);

 

下面是我用到的代码,放在这里参考

time_t now;

time(&now);

struct tm tm_now = *(localtime(&now));

sprintf(defaultname, "%04d%02d%02d", 1900+tm_now.tm_year, 1+tm_now.tm_mon, tm_now.tm_mday);


三、关于__DATE__, __TIME__宏

    简单说明下,这两个宏是获取程序的编译时间,前者获取年月日,后者获取时分秒,所以如果是要获取当前时间还是需要调用时间函数的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值