C/C++ 时间相关用法
基本時(shí)間函數(shù):
1. 名字:time_t time(time_t *t)
? ? 說(shuō)明:返回格林尼治時(shí)間從公元 1970 年1 月1 日的UTC 時(shí)間從0 時(shí)0 分0 秒算起到現(xiàn)在所經(jīng)過(guò)的秒數(shù),函數(shù)為value - result型
? ? 參數(shù):time_t為長(zhǎng)整型,即long型,所以最大能保存到2038年1月18日19時(shí)14分07秒
時(shí)間常用用法:
? ?1.1?獲取當(dāng)前時(shí)間戳(精確到秒)
? ? 示例:
int nCurTime = time(NULL);? ??
? ? 1.2? 獲取從1970年1月1日算起至今經(jīng)過(guò)的天數(shù)(從1開(kāi)始,以北京時(shí)間的日期為天數(shù)標(biāo)準(zhǔn),達(dá)到0時(shí)0分0秒即為新的一天)
? ? 示例:
// 一天的總秒數(shù)int DaySecond = 24 * 60 * 60;// 現(xiàn)在的時(shí)間戳,精確到秒int curTime = time(NULL);// 得到天數(shù),為什么要減去16個(gè)小時(shí)呢,請(qǐng)參照上面圖片,北京的0時(shí)是格林尼治時(shí)間的16時(shí)// 所以只有減去了16小時(shí)的秒數(shù),才是格林尼治時(shí)間的一天的0時(shí)0分0秒,當(dāng)然此種計(jì)算只適用于以北京時(shí)間為標(biāo)準(zhǔn)的int curDay = (curTime - 16 * 60 * 60) / DaySecond;? ? 1.3?有了以前的時(shí)間戳(精確到秒),計(jì)算現(xiàn)在是時(shí)間戳計(jì)算以來(lái)的第幾天(從1開(kāi)始,處于同一天則為1,以北京時(shí)間的日期為天數(shù)標(biāo)準(zhǔn),達(dá)到0時(shí)0分0秒即為新的一天)
? ? 示例:
// 一天的總秒數(shù)int DaySecond = 24 * 60 * 60; // 上次的時(shí)間戳,暫取北京時(shí)間2017年3月1日0時(shí)0分0秒int nLastTime = 1488297600; // 上次時(shí)間戳所處的天數(shù),減16小時(shí)秒數(shù)的原因同上int nLastDay = (nLastTime - 16* 60*60) / DaySecond ; // 當(dāng)前時(shí)間戳所處的天數(shù),減16小時(shí)秒數(shù)的原因同上int nCurDay = (time(NULL) - 16 * 60 * 60)/ DaySecond; // 間隔,加1表當(dāng)天為第一天int nIntervalDay= nCurDay - nLastDay + 1;2. 時(shí)間結(jié)構(gòu)體 tm 和?time_t的轉(zhuǎn)換
? ? 結(jié)構(gòu)體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轉(zhuǎn)換為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點(diǎn)tm1->tm_min = 58; // 58分tm1->tm_sec = 9; // 9秒time_t ti_t1 = mktime(tm1);cout<<"time_t1 value is "<<ti_t1<<endl;? ? 示例結(jié)果:
? ??
? ? 2.2 time_t轉(zhuǎn)換為tm
tm * localtime(const time_t * _Time);? ? 示例代碼:
// 獲取當(dāng)前時(shí)間time_t ti = time(NULL);//轉(zhuǎn)換成tm類型的結(jié)構(gòu)體;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;? ? 示例結(jié)果:
? ??
? ??
總結(jié)
以上是生活随笔為你收集整理的C/C++ 时间相关用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 万能makefile深入浅出- 第一篇
- 下一篇: C++实现反射