You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

163 lines
3.7 KiB
C++

#include "StdAfx.h"
#include "WorkTime.h"
#include "PciCh365Mgr.h"
CWorkTime gWorkTime;
CWorkTime::CWorkTime(void)
{
m_bRecordTime = false;//是否正在计时
m_LastWorkTime = "上次时间:";
}
CWorkTime::~CWorkTime(void)
{
}
CString CWorkTime::Time2Str(int n)
{
CString s;
if(n<10)
s.Format("0%ld",n);//左边补0
else
s.Format("%ld",n);
return s;
}
#if 1//粗略计时
//开始计时
void CWorkTime::StartRecordTime()
{
m_bRecordTime = true;
m_StartTime=CTime::GetCurrentTime();
}
void CWorkTime::StopRecordTime()
{
m_bRecordTime = false;
}
CString CWorkTime::GetTimeSpanStr()
{
if(!m_bRecordTime)
return "00:00:00";
//获取当前系统时间
CTime CurTime;
CTimeSpan TimeSpan;//时间差
CurTime=CTime::GetCurrentTime();
TimeSpan = CurTime - m_StartTime;
return GetTimeSpanStr(TimeSpan);
}
CTimeSpan CWorkTime::GetTimeSpan()
{
//获取当前系统时间
CTime CurTime;
CTimeSpan TimeSpan;//时间差
CurTime=CTime::GetCurrentTime();
TimeSpan = CurTime - m_StartTime;
return TimeSpan;
}
//获取当前经过时间
CString CWorkTime::GetTimeSpanStr(CTimeSpan &TimeSpan)
{
return Time2Str(TimeSpan.GetHours())+":"+Time2Str(TimeSpan.GetMinutes())+":"+Time2Str(TimeSpan.GetSeconds());
}
CString CWorkTime::GetCurDate(CString Separator)
{
CString str;
CTime CurTime;
CurTime=CTime::GetCurrentTime();
str += Time2Str(CurTime.GetYear())+Separator;
str += Time2Str(CurTime.GetMonth())+Separator;
str += Time2Str(CurTime.GetDay());
return str;
}
//获取当前时间Separator 为分隔符
CString CWorkTime::GetCurTime(CString Separator)
{
CString str;
CTime CurTime;
CurTime=CTime::GetCurrentTime();
str += Time2Str(CurTime.GetHour())+Separator;
str += Time2Str(CurTime.GetMinute())+Separator;
str += Time2Str(CurTime.GetSecond());
return str;
}
//当前经过了多少分钟
int CWorkTime::GetTimeSpanMin(CTimeSpan &TimeSpan)
{
int m = 0;
m += TimeSpan.GetHours() * 60;
m += TimeSpan.GetMinutes();
return m;
}
//记录最近一次运行时间
void CWorkTime::SaveLastWorkTime()
{
m_LastWorkTime = "上次时间:" + GetTimeSpanStr();
}
#endif
#if 1//精确计时
//开始精确计时
void CWorkTime::StartExactTime()
{
QueryPerformanceCounter(&m_ExactStart);
}
//获取精确时间,单位是ms
int CWorkTime::GetExactTime()
{
LARGE_INTEGER EndTime;
QueryPerformanceCounter(&EndTime);
int ret = ((EndTime.QuadPart - m_ExactStart.QuadPart)*1000)/(gPciCh365Mgr->GetClockFre().QuadPart);
return ret;
}
#endif
#if 1//倒计时功能
//当前经过了多少秒
double CWorkTime::GetTimeSpanSecond()
{
CTimeSpan TimeSpan = GetTimeSpan();
int s = 0;
s += TimeSpan.GetHours() * 60 * 60;
s += TimeSpan.GetMinutes() * 60;
s += TimeSpan.GetSeconds();
return s;
}
//开始倒计时
void CWorkTime::StartBackTime(double s)
{
m_BackTimeSeconds = s;
StartRecordTime();
}
//获取还剩多少时间
CString CWorkTime::GetLeftTimes()
{
double CurSeconds = GetTimeSpanSecond();//当前经过的秒数
int LeftSeconds = (int)(m_BackTimeSeconds-CurSeconds);
CString str = "00:00:00";
if(LeftSeconds>0)
{
int Seconds = LeftSeconds % 60;
LeftSeconds -= Seconds;
int Minutes = (LeftSeconds%3600)/60;
LeftSeconds -= Minutes*60;
int Hours = LeftSeconds/3600;
str = Time2Str(Hours)+":"+Time2Str(Minutes)+":"+Time2Str(Seconds);
}
return str;
}
//倒计时是否结束
bool CWorkTime::IsBackTimeEnd()
{
if(!m_bRecordTime)//已经结束
return true;
double CurSeconds = GetTimeSpanSecond();//当前经过的秒数
if(CurSeconds > m_BackTimeSeconds)
{
m_bRecordTime = false;
return true;
}
return false;
}
#endif