一、structtm 概述
structtm是C/C++语言中的一个结构体,其定义如下:
struct tm { int tm_sec; // 秒 int tm_min; // 分钟 int tm_hour; // 小时 int tm_mday; // 月的日期(1-31) int tm_mon; // 月(0-11) int tm_year; // 自 1900 起的年数 int tm_wday; // 星期(0-6,周日为 0) int tm_yday; // 自年初以来的天数(0-365) int tm_isdst; // 夏令时标识符(小于 0 表示没有夏令时;等于 0 表示不知道;大于 0 表示夏令时) };
structtm可用于获取和处理日期和时间,并支持转换为时间戳。其提供了一种用于表示和处理日期和时间的标准方式,可用于计算日期和时间的差异, 在文件操作中记录文件的最后修改时间, 等等。
二、获取系统当前日期和时间
获取系统当前日期和时间是调用structtm的一个主要用途,可通过time函数获得1970年至今的秒数,再通过localtime函数转换成本地时间。示例代码如下:
#include#include int main () { time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); printf ( "当前的本地时间为: %s", asctime (timeinfo) ); return 0; }
三、格式化输出时间
structtm提供了丰富的输出方法,可根据需要进行选择和组装,同时也可自定义。示例代码如下:
#include#include int main () { time_t rawtime; struct tm * timeinfo; char buffer [80]; time ( &rawtime ); timeinfo = localtime ( &rawtime ); strftime (buffer,80,"%Y-%m-%d %H:%M:%S",timeinfo); printf ( "格式化后的本地时间为: %s\n", buffer ); return 0; }
四、时间戳的转换
结构体tm提供了两个函数:mktime和gmtime,用于将时间戳转换为本地时间和GMT标准时间。示例代码如下:
#include#include int main () { time_t rawtime; struct tm * ptm; time ( &rawtime ); ptm = gmtime ( &rawtime ); printf ( "GMT时间: %d:%d:%d\n", ptm->tm_hour, ptm->tm_min, ptm->tm_sec ); ptm = localtime ( &rawtime ); printf ( "本地时间: %d:%d:%d\n", ptm->tm_hour, ptm->tm_min, ptm->tm_sec ); return 0; }
五、计算日期和时间的差异
使用mktime函数可将时间转换为秒数,从而可以进行日期和时间的计算。示例代码如下:
#include#include int main () { time_t rawtime; struct tm * timeinfo; double seconds; time ( &rawtime ); timeinfo = localtime ( &rawtime ); timeinfo->tm_mday += 30; //加上30天 seconds = difftime(mktime(timeinfo),rawtime); printf ( "一月后的日期: %s", asctime (timeinfo) ); printf ( "一月后与当前时间的时间差为 %.f 秒。", seconds); return 0; }
六、总结
structtm结构体提供了一种用于表示和处理日期和时间的标准方式,可方便地获取和处理当前时间、进行日期和时间的计算、格式化输出等操作。需要提醒的是,由于C/C++中使用time_t类型表示时间戳时的存储溢出问题,只能表示到2038年1月19日03:14:07的时间, 因此在进行时间计算时需要特别注意。