自己常用時間處理函數記錄

記錄自己常用的時間處理函數,方便以後查閱。

#ifndef __SELFTIME__
#define __SELFTIME__

#include <stdio.h>
#include <time.h>
#include <string>

#define TIME_ZONE_OFFSET_SECONDS  (8*3600) //東八區
const int one_hour_secs = 3600;
const int one_day_secs = 86400;  //24 * 3600
class SelfTime
{
public:
	SelfTime(){};
	~SelfTime(){};
	//獲取當前系統時間
	static int SelfTime::getCurrentTime(){
		long ltime = time(nullptr);
		return ltime;
	}
	//獲取時間的具體描述
	static struct tm SelfTime::getLocalTime(unsigned int goalTime/*if 0 get current time*/){
		struct tm *now;
		time_t tt;
		if (goalTime != 0){
			tt = goalTime;
		}
		else{
			tt = SelfTime::getCurrentTime();
		}
		tt += TIME_ZONE_OFFSET_SECONDS;
		now = gmtime(&tt);
		return *now;
	}
	//判斷當前時間和目標時間日期是否相同(目標時間需要不大於當前時間)
	static bool isSameDate(unsigned int goalTime/*<= current time*/){
		if (goalTime == 0){
			return false;
		}
		long resetTime = SelfTime::getResetTime();
		auto goalTm = SelfTime::getLocalTime(goalTime);
		auto nowTm = SelfTime::getLocalTime(0);

		int r_dis = goalTm.tm_hour * one_hour_secs + goalTm.tm_min * 60 + goalTm.tm_sec;
		int dis = nowTm.tm_hour * one_hour_secs + nowTm.tm_min * 60 + nowTm.tm_sec;

		if (goalTm.tm_year == nowTm.tm_year
			&&goalTm.tm_mon == nowTm.tm_mon
			&&goalTm.tm_mday == nowTm.tm_mday)
		{
			if ((r_dis <= resetTime&&dis <= resetTime)
				|| (dis >= resetTime&&r_dis >= resetTime))
			{
				return true;
			}
		}
		else{
			if (SelfTime::getCurrentTime() - goalTime<one_day_secs
				&&r_dis >= resetTime
				&&dis <= resetTime)
			{
				return true;
			}
		}
		return false;
	}
	//判斷當前時間和目標時間是否同周
	static bool isSameWeek(unsigned int goalTime)
	{
		int monday0 = SelfTime::getRelativeMonday0PassSecs();
		auto now = SelfTime::getCurrentTime();
		int disTime = now - goalTime;
		return disTime <= monday0;
	}
	//獲取相對當天0點過了多少秒
	static int getRelativeDay0PassSecs()
	{
		auto now = SelfTime::getLocalTime(0);
		long disTime = now.tm_hour * one_hour_secs + now.tm_min * 60 + now.tm_sec;
		return disTime;
	}
	//獲取相對本週週一0點過了多少秒
	static int getRelativeMonday0PassSecs()
	{
		auto now = SelfTime::getLocalTime(0);
		auto curWDay = now.tm_wday;
		if (now.tm_wday == 0)
		{
			curWDay = 7;
		}
		auto disTime = ((curWDay - 1) * one_day_secs) + now.tm_hour * one_hour_secs + now.tm_min * 60 + now.tm_sec;
		return disTime;
	}
	//獲取每天的重置時間(即跨天的時間點)
	static int getResetTime(){
		return 0;
	}
private:

};

#endif

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章