time.h包含C/C++中用于获取时间,和时间转换方面的函数。
1、time()
函数 time_t time(time_t *seconds) 返回自(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位。如果 seconds 不为空,则返回值也存储在变量 seconds 中。
例子:
cpp
#include <stdio.h>
#include <time.h>
int main ()
{
time_t seconds;
seconds = time(NULL);
printf("自 1970-01-01 起经过的小时数 = %ldn", seconds/3600);
return(0);
}
结果:
bash
自 1970-01-01 起的小时数 = 3757678
2、localtime()
struct tm *localtime(const time_t *timer) 使用 timer 的值来填充 tm 结构。timer 的值被分解为 tm 结构,并用本地时区表示
- struct tm结构的细节:
cpp
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 */
int tm_yday; /* 一年中的第几天,范围从 0 到 365 */
int tm_isdst; /* 夏令时 */
};
例子 1:
cpp
#include <stdio.h>
#include <time.h>
int main ()
{
time_t rawtime;
struct tm *info;
char buffer[80];
time( &rawtime );
info = localtime( &rawtime );
printf("当前的本地时间和日期:%s", asctime(info));
return(0);
}
结果:
bash
当前的本地时间和日期:Thu Aug 23 09:12:05 2012
例子 2:
cpp
// 将时间戳,以时间字符串形式输出
std::string timetToString(time_t tt) {
auto tm = localtime(&tt);
std::stringstream ss;
ss << tm->tm_year + 1900 << std::setw(2) << std::setfill('0')
<< tm->tm_mon + 1 << std::setw(2) << std::setfill('0') << tm->tm_mday
<< std::setw(2) << std::setfill('0') << tm->tm_hour << std::setw(2)
<< std::setfill('0') << tm->tm_min << std::setw(2) << std::setfill('0')
<< tm->tm_sec;
return ss.str();
}
3、mktime()
time_t mktime(struct tm *timeptr) 把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值。
例子:
cpp
/* 输入日期判断是周几 */
#include <stdio.h> /* printf, scanf */
#include <time.h> /* time_t, struct tm, time, mktime */
int main ()
{
time_t rawtime;
struct tm * timeinfo;
int year, month ,day;
const char * weekday[] = { "周日", "周一","周二", "周三","周四", "周五", "周六"};
/* 用户输入日期 */
printf ("年: "); fflush(stdout); scanf ("%d",&year);
printf ("月: "); fflush(stdout); scanf ("%d",&month);
printf ("日: "); fflush(stdout); scanf ("%d",&day);
/* 获取当前时间信息,并修改用户输入的输入信息 */
time ( &rawtime );
timeinfo = localtime ( &rawtime );
timeinfo->tm_year = year - 1900;
timeinfo->tm_mon = month - 1;
timeinfo->tm_mday = day;
/* 调用 mktime: timeinfo->tm_wday */
mktime ( timeinfo );
printf ("那一天是:%sn", weekday[timeinfo->tm_wday]);
return 0;
}
结果:
bash
年: 2023
月: 8
日: 14
那一天是:周一
4、gmtime()
struct tm *gmtime(const time_t *timer) 使用 timer 的值来填充 tm 结构,并用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。北京时间需要在此值的基础上加8小时。
例子:
cpp
#include <stdio.h>
#include <time.h>
#define BST (+1)
#define CCT (+8)
int main ()
{
time_t rawtime;
struct tm *info;
time(&rawtime);
/* 获取 GMT 时间 */
info = gmtime(&rawtime );
printf("当前的世界时钟:n");
printf("伦敦:%2d:%02dn", (info->tm_hour+BST)%24, info->tm_min);
printf("中国:%2d:%02dn", (info->tm_hour+CCT)%24, info->tm_min);
return(0);
}
结果:
bash
当前的世界时钟:
伦敦:14:10
中国:21:10