linux下的时间函数
2016-03-18 15:31
645 查看
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取值范围0到59,到达60时分钟跳转
tm_min取值范围0到59
tm_hour 取值范围0到23
tm_mday 取值范围1到31
tm_mon 取值范围0到11,所以实际计算时需要加1
tm_year 距离1900年的年数,所以实际计算时需要加1900
tm_isdst 有关夏令时的设置,国内一般不用,因为我们没实行
下面是关于时间转换的一些函数。
使用时首先需要将time_t类型的秒数转换成结构体形式,gmtime和localtime有此作用
Asctime和ctime是将结构体形式的时间再转换为一定格式的字符串,不过大多时候我们都自己定制了字符串的格式。
需要说明的是,加了_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__宏
简单说明下,这两个宏是获取程序的编译时间,前者获取年月日,后者获取时分秒,所以如果是要获取当前时间还是需要调用时间函数的。
一、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取值范围0到59,到达60时分钟跳转
tm_min取值范围0到59
tm_hour 取值范围0到23
tm_mday 取值范围1到31
tm_mon 取值范围0到11,所以实际计算时需要加1
tm_year 距离1900年的年数,所以实际计算时需要加1900
tm_isdst 有关夏令时的设置,国内一般不用,因为我们没实行
下面是关于时间转换的一些函数。
使用时首先需要将time_t类型的秒数转换成结构体形式,gmtime和localtime有此作用
Asctime和ctime是将结构体形式的时间再转换为一定格式的字符串,不过大多时候我们都自己定制了字符串的格式。
需要说明的是,加了_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__宏
简单说明下,这两个宏是获取程序的编译时间,前者获取年月日,后者获取时分秒,所以如果是要获取当前时间还是需要调用时间函数的。
相关文章推荐
- 《Linux内核分析》第四周学习总结
- 再谈互斥锁与条件变量!(终于搞清楚了啊!!!!!)
- 网站服务器选择windows主机好还是linux主机好
- Lynis:linux系统安全检查工具
- linux
- linux的nohup命令的用法
- Linux命令学习总结: file命令
- GNU/Linux 体系结构
- linux下QTE环境搭建
- centos 死活安装不上 libxml
- Linux下的Select函数详解
- 【linux】ls[1]学习
- Vim 复制粘帖格式错乱问题的解决办法
- Linux内核分析第四周学习总结——系统调用的工作机制
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例
- 查看 SELinux状态及关闭SELinux
- linux 中软连接和硬链接
- linux常用命令总结
- Centos linux安装MySQL-5.6.4
- centos系统安装中文字体几种方法