自写的时间相关类

 
为了测试程序的性能,需要获得程序的执行时间,在做的过程中发现 CTime,CTimeSpan 精度不够高, SYSTEMTIME 精度尚可,所以参考网上一些资料,对 SYSTEMTIME 做了一层浅浅的封装。
程序主要如下:
 
// Begin
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef INCLUDED_MYTIME_H
#define INCLUDED_MYTIME_H
#include <WTypes.h>
#include <atlstr.h>
#include <atltime.h>
class MyTimeSpan;
class MyTime
{
public:
 MyTime();
 MyTime(const SYSTEMTIME& st);
 void SetTime(const SYSTEMTIME& st);
 SYSTEMTIME GetTime() const;
 MyTimeSpan operator-(const MyTime& time ) const;
private:
 SYSTEMTIME m_time;
};
class MyTimeSpan
{
 friend class MyTime;
public:
 MyTimeSpan();
 INT64   GetTotalMinutes() const;
 INT64   GetTotalSeconds() const;
 INT64   GetTotalMilliSeconds() const;
 INT64   GetMinute() const;
 INT64   GetSecond() const;
 INT64   GetMilliSecond() const;
 CString ToString() const;
private:
 INT64   m_milliSeconds;
};
inline MyTime::MyTime()
{
 GetLocalTime(&m_time);
}
inline MyTime::MyTime(const SYSTEMTIME& st)
{
 SetTime(st);
}
inline void MyTime::SetTime(const SYSTEMTIME& st)
{
 m_time = st;
}
inline SYSTEMTIME MyTime::GetTime() const
{
 return m_time;
}
inline MyTimeSpan MyTime::operator-(const MyTime& st) const
{
 MyTimeSpan sts; 
 SYSTEMTIME left = this->m_time;
 SYSTEMTIME right = st.m_time;
 CTime  tmLeft(left.wYear, left.wMonth, left.wDay,0,0,0); 
 CTime  tmRight(right.wYear, right.wMonth, right.wDay,0,0,0); 
 CTimeSpan  sp = tmLeft - tmRight;
 long lLMinllis = ((((left.wHour*60 + left.wMinute)*60 +left.wSecond)*1000) + left.wMilliseconds);
 long lRMinllis = ((((right.wHour*60 + right.wMinute)*60 +right.wSecond)*1000) + right.wMilliseconds);
 sts.m_milliSeconds =  (INT64)(sp.GetDays()*24*60*60*1000) + lLMinllis - lRMinllis;
 return sts;
}
inline MyTimeSpan::MyTimeSpan()
{
 m_milliSeconds = 0;
}
inline INT64 MyTimeSpan::GetTotalMilliSeconds() const
{
 return m_milliSeconds; 
}
inline INT64 MyTimeSpan::GetTotalSeconds() const
{
 return m_milliSeconds/1000;
}
inline INT64 MyTimeSpan::GetTotalMinutes() const
{
 return (m_milliSeconds/1000)/60;
}
inline INT64 MyTimeSpan::GetMinute() const
{
 INT64 tmp = GetTotalSeconds();
 return tmp/60;
}
inline INT64 MyTimeSpan::GetSecond() const
{
 INT64 tmp = GetTotalSeconds(); 
 return tmp % 60;
}
inline INT64 MyTimeSpan::GetMilliSecond() const
{
 return m_milliSeconds%1000;
}
inline CString MyTimeSpan::ToString() const
{
 CString str;
 int minute = static_cast<int>(GetMinute());
 int second = static_cast<int>(GetSecond());
 int milliSecond = static_cast<int>(GetMilliSecond());
 str.Format(_T("%d minutes %d seconds %d milliseconds"), minute, second, milliSecond);
 return str;
}
#endif
// End

你可能感兴趣的:(类,休闲,ctime,CTimeSpan,SYSTEMTIME)