⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timestamp.h

📁 该代码是将MSDN中的httpsvr MFC代码移植到STL。含有VC完整应用程序代码。
💻 H
字号:
#if !defined(TimeStamp_H)
#define TimeStamp_H


#include <string>
#include <sstream>
using namespace std;


#define MIN_DATE                (-657434L)  // about year 100
#define MAX_DATE                2958465L    // about year 9999

double	DoubleFromDate				( DATE dt );
DATE	DateFromDouble				( double dbl );


/*

// Verifies will fail if the needed buffer size is too large
#define MAX_TIME_BUFFER_SIZE    128         // matches that in timecore.cpp


// Half a second, expressed in days
#define HALF_SECOND  (1.0/172800.0)
BOOL	OleDateFromTm				( WORD wYear, WORD wMonth, WORD wDay,
									  WORD wHour, WORD wMinute, WORD wSecond, 
									  DATE& dtDest );
BOOL	TmFromOleDate				( DATE dtSrc, struct tm& tmDest );
void	TmConvertToStandardFormat	( struct tm& tmSrc );
double	DoubleFromDate				( DATE dt );
DATE	DateFromDouble				( double dbl );
*/

//////////////////////////////////////////////////////////////////////////////////
// TimeStamp

class TimeStamp
{
	DATE			m_timestamp;
	long			m_valid;
	bool			m_standard;
	string			m_format;

public:

	TimeStamp	();

	TimeStamp	( TimeStamp& dateSrc );
	TimeStamp	( VARIANT& varSrc );
	TimeStamp	( DATE dtSrc );

	TimeStamp	( SYSTEMTIME& systimeSrc );
	TimeStamp	( FILETIME& filetimeSrc);

	TimeStamp	( long nYear, long nMonth, long nDay,
				  long nHour, long nMin, long nSec );


	// enum to show if timestamp valid
	enum
	{
		valid = 0,
		invalid = 1,    // Invalid date (out of range, etc.)
		null = 2,       // Literally has no value
	};


	// format methods
	string  format				( LPTSTR strFormat );
	void	setDefaultFormat	();
	void	setFormat			( string & strFormat );
	void	getTimeStr			( string & timeStr, bool showSeconds );
	void	getDateStr			( string & dateStr, bool useShortDateFormat );

	bool	getTimeStamp		( string & str, bool showSeconds = false );
	bool	getTimeStamp		( string & str,
		                          string & format, 
							      DWORD dwFlags = 0,
								  LCID lcid = LANG_USER_DEFAULT );

	static void getTimeStamp	(  DATE timestamp, string & str );


	// get current and store
			void	getCurTimeStamp	();
	static	void	getCurTimeStamp	( DATE & timestamp );
	static	void	getCurTimeStamp	( string & str );

	// access methods
	long	getStatus		();

	long	getYear			();
	long	getMonth		();		    // month of year (1 = Jan)
	long	getDay			();	        // day of month (0-31)
	long	getHour			();			// hour in day (0-23)
	long	getMinute		();			// minute in hour (0-59)
	long	getSecond		();			// second in minute (0-59)
	long	getDayOfWeek	();			// 0=Sun, 1=Mon, ..., 6=Sat

	double	getDays			();			// span in days
	double	getHours		();			// span in hours
	double	getMinutes		();			// span in minutes
	double	getSeconds		();			// span in seconds

	// copy methods
	void		operator =		( const TimeStamp& dateSrc );
	void		operator =		( VARIANT& varSrc );
	void		operator =		( DATE dtSrc );

	void		operator =		( SYSTEMTIME& systimeSrc );
	void		operator =		( FILETIME& filetimeSrc );

	// compare methods
	bool		operator ==		( const TimeStamp& date );
	bool		operator !=		( const TimeStamp& date );
	bool		operator <		( const TimeStamp& date );
	bool		operator >		( const TimeStamp& date );
	bool		operator <=		( const TimeStamp& date );
	bool		operator >=		( const TimeStamp& date );

	// math methods
	TimeStamp	operator  +		( TimeStamp & dateSpan );
	TimeStamp	operator  -		( TimeStamp & dateSpan );
	TimeStamp & operator +=		( TimeStamp dateSpan );
	TimeStamp & operator -=		( TimeStamp dateSpan );


	operator DATE();

	// set/get datestamp methods

	void	setDateTime		( long year, long month, long day,
							  long hour, long minute, long second );

	void	setDate			( long year, long month, long day );
	void	setTime			( long hour, long minute, long second );
	void	setTime			( SYSTEMTIME & sysTime );
	void	setDate			( SYSTEMTIME & sysTime );

	void	getDate			( long & year, long & month, long & day );
	void	getTime			( long & hour, long & minute, long & second );
	void	getTime			( SYSTEMTIME & sysTime );
	void	getDate			( SYSTEMTIME & sysTime );

	// check if valid
	bool	isValid			();

	// shows if time is empty
	bool	empty			();
	

};


inline
bool TimeStamp::empty ()
{

	if ( !isValid() || m_timestamp == 0 )
		return false;
	else
		return true;
}


inline
void TimeStamp::getDate ( long & year, long & month, long & day )
{
	SYSTEMTIME sysTime;
	VariantTimeToSystemTime( m_timestamp, &sysTime );

	year  = sysTime.wYear;
	month = sysTime.wMonth;
	day   = sysTime.wDay;
}

inline
void TimeStamp::getTime	( long & hour, long & minute, long & second )
{
	SYSTEMTIME sysTime;
	VariantTimeToSystemTime( m_timestamp, &sysTime );

	hour    = sysTime.wHour;
	minute  = sysTime.wMinute;
	second  = sysTime.wSecond;
}



inline
void TimeStamp::getTime ( SYSTEMTIME & sysTime )
{
	VariantTimeToSystemTime( m_timestamp, &sysTime );
}

inline
void TimeStamp::getDate ( SYSTEMTIME & sysTime )
{
	VariantTimeToSystemTime( m_timestamp, &sysTime );
}

inline
void TimeStamp::setDate(long year, long month, long day )
{ 
	setDateTime(year, month, day, 0, 0, 0); 
}

inline
void TimeStamp::setTime(long hour, long minute, long second)
{	
	// Set date to zero date - 12/30/1899
	setDateTime(1899, 12, 30, hour, minute, second); 
}

inline
void TimeStamp::setTime ( SYSTEMTIME & sysTime )
{
	// Set date to zero date - 12/30/1899
	setDateTime(1899, 12, 30, sysTime.wHour, sysTime.wMinute, sysTime.wSecond); 
}

inline
void TimeStamp::setDate ( SYSTEMTIME & sysTime )
{ 
	setDateTime(sysTime.wYear, sysTime.wMonth, sysTime.wDay, 0, 0, 0); 
}




inline
double TimeStamp::getDays()
{ 
	_ASSERT(m_valid == valid); 
	return m_timestamp; 
}

inline
double TimeStamp::getHours()
{ 
	_ASSERT(m_valid == valid); 
	return m_timestamp * 24; 
}

inline
double TimeStamp::getMinutes()
{ 
	_ASSERT(m_valid == valid); 
	return m_timestamp * 24 * 60; 
}

inline
double TimeStamp::getSeconds()
{ 
	_ASSERT(m_valid == valid); 
	return m_timestamp * 24 * 60 * 60; 
}


/*
inline
long TimeStamp::getDays()
{ 
	_ASSERT(m_valid == valid); 
	return (long)m_timestamp; 
}
*/

inline
void TimeStamp::operator=( const TimeStamp& dateSrc)
{ m_timestamp = dateSrc.m_timestamp; m_valid = dateSrc.m_valid; }

inline
bool TimeStamp::operator==(const TimeStamp& date)
{ 
	return (m_valid == date.m_valid && m_timestamp == date.m_timestamp); 
}

inline
bool TimeStamp::operator!=(const TimeStamp& date)
{ 
	return (m_valid != date.m_valid || m_timestamp != date.m_timestamp); 
}

inline
TimeStamp& TimeStamp::operator+=(TimeStamp dateSpan)
{ 
	*this = *this + dateSpan; 
	return *this; 
}

inline
TimeStamp& TimeStamp::operator-=(TimeStamp dateSpan)
{ 
	*this = *this - dateSpan; 
	return *this; 
}

inline
TimeStamp::operator DATE()
{ 
	return m_timestamp; 
}



#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -