C语言获取系统日期及时间(time.h的应用)
以下内容基于C/C++语言参考手册的整理与补充
系统时间的获取
time()函数
在头文件time.h中
time_t time( time_t *time );//返回值为time_t 类型
函数返回当前时间(sec),从1970年1月1日至此时经历的秒数。如果发生错误返回零。如果给定参数time ,那么当前时间存储到参数time中。
通过time()函数来获得计算机系统当前的日历时间,在该函数的基础上进行日期与时间的处理。
time()函数返回值的处理
- localtime() 函数的使用
//原型
struct tm *localtime( const time_t *time );
int main(){
time_t now;
struct tm *time_now;
time(&now);//等价于now=time(NULL)
time_now=localtime(now);
}
函数返回struct tm结构体指针
该结构体定义在time.h中 具体如下
struct tm {
int tm_sec;//秒[0,59]
int tm_min;//分 - 取值区间为[0,59]
int tm_hour;// 时 - 取值区间为[0,23]
int tm_mday;//一个月中的日期 - 取值区间为[1,31]
int tm_mon;//月份(从一月开始,0代表一月)[0,11]
int tm_year;//年,其值等于实际年份减去1900
int tm_wday;//星期[0,6],其中0代表星期天,1代表星期一
int tm_yday;//从每年1月1日开始的天数,[0,365],0表示1月1日
int tm_isdst;//夏令时标识符,不实行夏令时tm_isdst为0
};
逆函数mktime(struct tm *ptime)功能相反,将结构体time转换为秒,发生错误返回-1。
2.strftime()函数的使用
size_t strftime( char *str, size_t maxsize, const char *fmt, struct tm *time );
函数按照参数fmt所设定格式将time类型的参数格式化为日期时间信息,然后存储在字符串str中(至多maxsize 个字符)。
格式控制字符串fmt如下表所示://0表示周日,周日是一周的开始
格式控制 | 含义 | 格式控制 | 含义 |
---|---|---|---|
%a | 星期的缩略形式 | %M | 分钟[0-59] |
%A | 星期的完整形式 | %p | AM or PM |
%b | 月份的缩略形式 | %S | 秒钟[0-59] |
%B | 月份的完整形式 | %w | 星期几的数字表示[0-6] |
%c | 月份的缩略形式 | %W | 一年中的第几周 |
%d | 月中的第几天(1-31) | %x | 标准日期字符串 |
%H | 小时, 24小时格式 (0-23) | %X | 标准时间字符串 |
%I | 小时, 12小时格式 (1-12) | %y | 年[0-99] |
%j | 一年中的第几天(1-366) | %Y | 用CCYY表示的年(如:2004) |
%m | 月份 (1-12) | %Z | 时区名 |
3. gmtime ()函数
同localtime()函数,短时返回给定的统一世界时间(通常是格林威治时间),如果系统不支持统一世界时间系统返回NULL。
4.difftime()函数
double difftime( time_t time2, time_t time1 );
返回时间参数time2和time1之差(sec)。
5.ctime() 函数
char *ctime( const time_t *time );
等同于asctime( localtime( tp ) )
函数转换参数time为本地时间格式:
day month date hours:minutes:seconds year\n\0
6.asctime()
char *asctime( const struct tm *ptr );
函数将ptr所指向的时间结构体转换成下列字符串:
day month date hours:minutes:seconds year\n\0
最有用的来了
clock()函数
clock_t clock( void );
函数返回自程序开始运行的处理器时间,如果无可用信息,返回-1。 转换返回值以秒记, 返回值除以CLOCKS_PER_SECOND. (注: 如果编译器是POSIX兼容的, CLOCKS_PER_SECOND定义为1000000.)