- 得到当前系统时间
使用time()函数获取当前时间
time_t now = time(NULL);
printf(“now: %d \n”, (int) now);
time_t类型:是一个整数,可以强转为int型来打印
(time_t的是一个整数,跟编译器有关,通常是32位整数或64位整数)
- time_t
now的值表示自“1970-01-01 00:00:00”这个时间点的秒值数。
可以发现,每次运行,这个值都是变的。变化的值,就是中间相差的时间(秒数)
但是,我们如何使用它?
- tm: 转化成“年月里时分秒”
可以把time_t转成年月日时分秒
使用localtime()函数
tm * localtime(const time_t *p);
输入参数:time_t*
返回值 : tm*
其中,tm是一个struct类型,包含了年、月、日、时、分、秒、星期等详细信息。
struct tm的定义
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~11
int tm_year; // 年: +1900
int tm_wday; // 星期几: 0~6,其中0表示星期日
int tm_yday; // 这一年的第几天: 0~365
};
time_t now = time(NULL);
tm info = *localtime(&now); // 保存结果
int year = info.tm_year + 1900;
int month = info.tm_mon + 1;
int day = info.tm_mday;
int hour = info.tm_hour;
int minute = info.tm_min;
int second = info.tm_sec;
例:求出自今天起、300天以后的日期值。
time_t now = time(NULL); // 当前时间
now += 300 * 24 * 3600; // 加上时间间隔
tm info = *localtime(&now);
- “年月里时分秒”转换为time_t?time_t的优势:一个整数,容易存储和计算我们可以把一个时间转成time_t, 比如,”2015-02-01 00:00:00″ 转成 time_t使用mktime函数
time_t mktime(tm * p);
time_t convert(int year, int month, int day,
int hour, int minute, int second)
{
tm info = {0};
info.tm_year = year – 1900;
info.tm_mon = month – 1;
info.tm_mday = day;
info.tm_hour = hour;
info.tm_min = minute;
info.tm_sec = second;
return mktime(&info);
}
注:tm_wday和tm_yday不需要填写
例:计算两个日期之间隔了多少天
比如,“2015-4-6”到“2013-2-2”
time_t start = convert(2013,2,2,0,0,0) ;
time_t end = convert(2015,4,6,0,0,0);
// 差值
int diff = (int)(end – start);
// 计算是多少天
int days = diff / (24*3600);