0
点赞
收藏
分享

微信扫一扫

C/C++ 时间相关用法


基本时间函数:

1. 名字:time_t time(time_t *t)

    说明:返回格林尼治时间从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起到现在所经过的秒数,函数为value - result型

    参数:time_t为长整型,即long型,所以最大能保存到2038年1月18日19时14分07秒


时间常用用法:

1.1 获取当前时间戳(精确到秒)

    示例:

int nCurTime = time(NULL);

C/C++ 时间相关用法_CC

    

    1.2  获取从1970年1月1日算起至今经过的天数(从1开始,以北京时间的日期为天数标准,达到0时0分0秒即为新的一天)

    示例:

// 一天的总秒数
int DaySecond = 24 * 60 * 60;

// 现在的时间戳,精确到秒
int curTime = time(NULL);

// 得到天数,为什么要减去16个小时呢,请参照上面图片,北京的0时是格林尼治时间的16时
// 所以只有减去了16小时的秒数,才是格林尼治时间的一天的0时0分0秒,当然此种计算只适用于以北京时间为标准的
int curDay = (curTime - 16 * 60 * 60) / DaySecond;

    1.3 有了以前的时间戳(精确到秒),计算现在是时间戳计算以来的第几天(从1开始,处于同一天则为1,以北京时间的日期为天数标准,达到0时0分0秒即为新的一天)

    示例:

// 一天的总秒数
int DaySecond = 24 * 60 * 60;

// 上次的时间戳,暂取北京时间2017年3月1日0时0分0秒
int nLastTime = 1488297600;

// 上次时间戳所处的天数,减16小时秒数的原因同上
int nLastDay = (nLastTime - 16* 60*60) / DaySecond ;

// 当前时间戳所处的天数,减16小时秒数的原因同上
int nCurDay = (time(NULL) - 16 * 60 * 60)/ DaySecond;

// 间隔,加1表当天为第一天
int nIntervalDay= nCurDay - nLastDay + 1;

2. 时间结构体 tm 和 time_t的转换

    结构体tm的定义:

struct tm 
{
int tm_sec; /* seconds after the minute - [0,59] */
int tm_min; /* minutes after the hour - [0,59] */
int tm_hour; /* hours since midnight - [0,23] */
int tm_mday; /* day of the month - [1,31] */
int tm_mon; /* months since January - [0,11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday - [0,6] */
int tm_yday; /* days since January 1 - [0,365] */
int tm_isdst; /* daylight savings time flag */
};

    time_t的定义:即32位整型或64位整型

#ifndef _TIME_T_DEFINED
#ifdef _USE_32BIT_TIME_T
typedef __time32_t time_t; /* time value */
#else
typedef __time64_t time_t; /* time value */
#endif

2.1 tm转换为time_t

time_t mktime(struct tm * _Tm);

    示例代码:

tm* tm1   = new tm();
tm1->tm_year = 118; // 2018年
tm1->tm_mon = 3; // 4月
tm1->tm_mday = 14; // 14日
tm1->tm_hour = 10; // 10点
tm1->tm_min = 58; // 58分
tm1->tm_sec = 9; // 9秒
time_t ti_t1 = mktime(tm1);
cout<<"time_t1 value is "<<ti_t1<<endl;

    示例结果:

    

C/C++ 时间相关用法_time_02

2.2 time_t转换为tm

tm *  localtime(const time_t * _Time);

    示例代码:

// 获取当前时间
time_t ti = time(NULL);

//转换成tm类型的结构体;
tm * time = localtime(&ti);
cout<<"year="<<time->tm_year<<endl;
cout<<"mon="<<time->tm_mon<<endl;
cout<<"day="<<time->tm_mday<<endl;
cout<<"hour="<<time->tm_hour<<endl;
cout<<"min="<<time->tm_min<<endl;
cout<<"sec="<<time->tm_sec<<endl;

    示例结果:

    

C/C++ 时间相关用法_时间_03

    



举报

相关推荐

0 条评论