1. 程式人生 > >C/C++ 時間相關用法

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


    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;

    示例結果:

    

    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;

    示例結果: