Unix时间和日期
Unix内核提供的基本时间服务是计算自国际标准时间1970年1月1日00:00:00以来经历的秒数(time_t类型)。Unix系统中时间戳一般32位数据存储,到2038年,32位数将溢出。
time函数返回当前时间和日期
#include <time.h>
time_t time(time_t *time);
时间总是作为函数返回值。如果参数不为空,则时间值放入time指针指向的内存单元。
gettimeofday提供更高的时间分辨率(微秒)
#include <sys/time.h>
int gettimeofday(struct timeval *tv, void * tz); //第二个参数某些平台表示时区信息
struct timeval
{
time_t tv_sec; /* seconds */
time tv_usec; /* microseconds */
};
localtime和gmtime将日历时间转换以年,月,日,时,分,秒…表示的时间,并存放到struct tm结构中。
struct tm
{ /* a broken-down time */
int tm_sec; /* seconds after the minute: [0, 61] */
int tm_min; /* minutes after the hour: [0, 59] */
int tm_hour; /* hours after midnight: [0, 23] */
int tm_mday; /* day of the month: [1, 31] */
int tm_mon; /* month of the year: [0, 11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday: [0, 6] */
int tm_yday; /* days since January 1: [0, 365] */
int tm_isdst; /* daylight saving time flag: <0, 0, >0 */
} ;
localtime与gmtime的区别是:localtime将日历时间转换成本地时间(考虑到本地的时区和夏时制标志),而gmtime将日历转换成国际标准时间的年,月,日,时…..
#include <time.h>
struct tm *gmtime(const time_t *time);
struct tm *localtime(const time_t *time);
函数mktime以tm结构为参数,返回time_t类型值
#include <time.h>
time_t mktime(struct tm* tmptr);
asctime和ctime产生时间字符串,前者以tm结构为参数,后者以time_t为参数。
如Tue Feb 18:30:20 2009\12\17
#include <time.h>
char *asctime(const struct tm* tmptr);
char *ctime(const time_t *time);
strftime类似与printf,将时间格式化到一个缓冲区中
#include <time.h>
size_t strftime(char *buf, size_t maxsize, const char *format, const struct tm *tmptr);
其中format格式如%s代表秒,详情man strftime看查看所有参数。
几种时间格式的转换图如下: