Linux下时间的处理函数

time_t time(time_t *t);

time函数是最常用的函数,查询当前时间。当前时间为从UTC时间的1970年0点0分0秒经过的秒数。

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

该函数也是获得当前时间和当前时区。该时间结构为:

struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ };

该时间可以精确到微秒,tv_sec字段数值上面等于time()的返回值。所以对一些对精度要求比较高的场合比较适用。

时区信息结构为:

struct timezone { int tz_minuteswest; /* minutes west of Greenwich */ int tz_dsttime; /* type of DST correction */ };

tz_minuteswest获得当前系统所在时区和UTC的时间差,tz_minuteswest以分钟计算。比如北京GMT+8区,tz_minuteswest为-480。

tz_dsttime的定义为日光节约时间(DST,也就是夏令时。)Linux不支持这个字段。

struct tm *localtime(const time_t *timep);

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

该函数将UTC时间(从1970年1月1日0时经历的秒数),转换成当前时区时间。tm的定义为:

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 */ };

localtime返回一个tm的指针,该指针不能保存,因为他指向的内容可能很快会被改变。该函数多线程不安全,这个函数是标准C定义的。localtime_r是Linux扩展的函数,该函数调用者需要传入一个tm指针。这个函数是线程安全的。

struct tm * gmtime ( const time_t * timer );

把时间(time_t)转换成UTC时间tm。一定需要注意这个tm时间是UTC时间,不是当前时区的时间。

time_t mktime ( struct tm * timeptr );

用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。注意timeptr是当前时区的时间,时间转换的时候会进行时区的转换。

Linux提供了settimeofday来设置系统时间:

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

该函数需要root权限才能调用。这也就是为什么Linux系统时间不能随便改的原因了。

时间转换成字符串: char * asctime ( const struct tm * timeptr );

该函数将时间时间转换成字符串,转换的格式和系统的语言设置有关系。字符串很死板和固定,一般不用。

size_t strftime ( char * ptr, size_t maxsize, const char * format, const struct tm * timeptr );

该函数将时间格式化输出成字符串。这个函数用比较多,和输出函数printf一样,可以指定输出的格式。具体请查手册。

发布了16 篇原创文章 · 获赞 5 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ok_wolf/article/details/38071473