[语法]标准C函数time

  • 得到当前系统时间

使用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);

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注