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

📄 cdatetime.h

📁 VC网络程序设计实例导航配套代码
💻 H
字号:
/*
	CDateTime.h
	Classe base per data/ora (CRT).
	Luca Piergentili, 24/11/99
	lpiergentili@yahoo.com
	http://www.geocities.com/lpiergentili/
*/
#ifndef _CDATETIME_H
#define _CDATETIME_H 1

#include "typedef.h"
#include <stdio.h>
#include <stdlib.h>

#define MAX_DATE_STRING	64	// dim. max per una stringa con la data
#define MAX_TIME_STRING	32	// dim. max per una stringa con l'ora
#define MAX_DATETIME_BUF	16	// dim. max per un elemento della data/ora

/*
	DAY
	tipo per i giorni della settimana
*/
enum DAY {
	MON = 0,
	TUE,
	WED,
	THU,
	FRI,
	SAT,
	SUN
};

/*
	MONTH
	tipi per i mesi dell'anno
*/
enum MONTH {
	JAN = 0,
	FEB,
	MAR,
	APR,
	MAY,
	JUN,
	JUL,
	AUG,
	SEP,
	OCT,
	NOV,
	DEC
};

/*
	DATETIMEOBJECT
	tipo per il tipo dell'oggetto
*/
enum DATETIMEOBJECT {
	YEAR,
	MONTH,
	DAY,
	HOUR,
	MINUTE,
	SECOND
};

//$ L'UTC E' SEMPRE LOCALE, OSSIA E' L'ORA GMT CONVERTITA IN LOCALE

/*
	DATEFORMAT
	tipo per i formati della data
*/
enum DATEFORMAT {
	AMERICAN = 0,		// "mm/dd/yyyy"
	ANSI,			// "yyyy.mm.dd"
	ANSI_SHORT,		// "yyyymmdd"
	BRITISH,			// "dd/mm/yyyy"
	FRENCH,			// "dd/mm/yyyy"
	GERMAN,			// "dd.mm.yyyy"
	ITALIAN,			// "dd-mm-yyyy"
	JAPAN,			// "yyyy/mm/dd"
	USA,				// "mm-dd-yyyy"
	MDY,				// "mm/dd/yyyy"
	DMY,				// "dd/mm/yyyy"
	YMD,				// "yyyy/mm/dd"
	GMT_SHORT,		// "Day, dd Mon yyyy hh:mm:ss" (assumendo GMT, ossia convertendo l'UTC in GMT)
	GMT,				// "Day, dd Mon yyyy hh:mm:ss <-|+>nnnn" (con l'UTC, ossia il <-|+>nnnn, locale)
	GMT_TZ,			// "Day, dd Mon yyyy hh:mm:ss <-|+>nnnn TZ" (con l'UTC, ossia il <-|+>nnnn, locale, dove TZ e' l'identificativo di tre caratteri per l'UTC)
	UNKNOW_DATEFORMAT	// ???
};

/*
	TIMEFORMAT
	tipo per i formati dell'ora
*/
enum TIMEFORMAT {
	HHMMSS = 0,		// "hh:mm:ss"
	HHMMSS_AMPM,		// "hh:mm:ss <AM|PM>"
	HHMMSS_SHORT,		// "hhmmss"
	HHMMSS_GMT_SHORT,	// "hh:mm:ss" (assumendo GMT, ossia convertendo l'UTC in GMT)
	HHMMSS_GMT,		// "hh:mm:ss <-|+>nnnn" (con l'UTC, ossia il <-|+>nnnn, locale)
	HHMMSS_GMT_TZ,		// "hh:mm:ss <-|+>nnnn TZ" (con l'UTC, ossia il <-|+>nnnn, locale, dove TZ e' l'identificativo di tre caratteri per l'UTC)
	UNKNOW_TIMEFORMAT	// ???
};

class CDateTime
{
public:
	// operatori
	CDateTime& operator=(const CDateTime& d);
	CDateTime& operator=(const CDateTime* d);

	// costruttori
	CDateTime(DATEFORMAT = UNKNOW_DATEFORMAT,TIMEFORMAT = UNKNOW_TIMEFORMAT,
			int dayofweek = -1,
			int day = -1, int month = -1,int year = -1,
			int hour = -1,int min = -1,  int sec = -1
			);
	CDateTime(const char* date,DATEFORMAT datefmt);

	// distruttore
	virtual ~CDateTime() {}
	
	// azzera l'oggetto
	void			Reset			(void);

	// data/ora di sistema e impostazione campi della struttura interna
	void				SetDate			(int dayofweek = -1,int day = -1,int month = -1,int year = -1);
	inline void		SetDayofWeek		(int dayofweek)				{m_Date.dayofweek = dayofweek;}
	inline void		SetDay			(int day)						{m_Date.day = day;}
	inline void		SetMonth			(int month)					{m_Date.month = month;}
	inline void		SetYear			(int year)					{m_Date.year = year;}
	
	void				GetDate			(int& dayofweek,int& day,int& month,int& year);
	inline int		GetDayofWeek		(void)						{return(m_Date.dayofweek);}
	inline int		GetDay			(void)						{return(m_Date.day);}
	inline int		GetMonth			(void)						{return(m_Date.month);}
	inline int		GetYear			(void)						{return(m_Date.year);}

	void				SetTime			(int hour = -1,int min = -1,int sec = -1);
	inline void		SetHour			(int hour)					{m_Time.hour = hour;}
	inline void		SetMin			(int min)						{m_Time.min = min;}
	inline void		SetSec			(int sec)						{m_Time.sec = sec;}
	
	void				GetTime			(int& hour,int& min,int& sec);
	inline int		GetHour			(void)						{return(m_Time.hour);}
	inline int		GetMin			(void)						{return(m_Time.min);}
	inline int		GetSec			(void)						{return(m_Time.sec);}

	const char*		Get12HourTime		(BOOL getsystime = TRUE);
	inline const char*	GetElapsedTime		(long seconds)					{return(GetElapsedTime((float)seconds));}
	const char*		GetElapsedTime		(float seconds);

	// formato
	inline void		SetDateFormat		(DATEFORMAT format)				{m_Date.format = format;}
	inline DATEFORMAT	GetDateFormat		(void)						{return(m_Date.format);}
	const char*		GetFormattedDate	(BOOL getsysdate = TRUE);
	inline void		SetTimeFormat		(TIMEFORMAT format)				{m_Time.format = format;}
	inline TIMEFORMAT	GetTimeFormat		(void)						{return(m_Time.format);}
	inline const char*	GetFormattedTime	(BOOL getsystime = TRUE);

	// conversioni	
	const char*		ConvertDate		(DATEFORMAT fmtsrc,DATEFORMAT fmtdst,const char* pdate,const char* ptime);
	const char*		ConvertTime		(TIMEFORMAT fmtsrc,TIMEFORMAT fmtdst,const char* pdate,const char* ptime);

	// operazioni
	int				DaysInMonth		(int month,int year);
	void				ModifyDateTime		(DATETIMEOBJECT type,int qta);

	// time zone
	int				GetDSTZone		(void);
	long				GetTimeZoneDiff	(void);
	const char*		GetTimeZoneName	(void);
	const char*		GetDSTZoneName		(void);

	// impostano i campi della struct interna con data/ora di sistema
	const char*		GetSystemDate		(void);
	void				GetSystemDate		(int& day,int& month,int& year);
	const char*		GetSystemTime		(void);
	void				GetSystemTime		(int& hour,int& min,int& sec);

	// verifica se si tratta di un anno bisestile
	BOOL				IsLeapYear		(int year);

private:
	// copia un oggetto sull'altro
	void				Copy				(CDateTime* date1,const CDateTime* date2);

	// ricavano data/ora del sistema
	const char*		GetOsDate			(void);
	const char*		GetOsTime			(void);
	
	struct DATE {
		DATEFORMAT format;						// formato
		char		datestr[MAX_DATE_STRING + 1];		// buffer interno usato per le conversioni (volatile)
		int		dayofweek;					// giorno della settimana
		int		day;							// giorno, mese, anno
		int		month;
		int		year;
		char		daystr[MAX_DATETIME_BUF + 1];
		char		monthstr[MAX_DATETIME_BUF + 1];
		char		yearstr[MAX_DATETIME_BUF + 1];
	};

	struct TIME {
		TIMEFORMAT format;						// formato
		char		timestr[MAX_TIME_STRING + 1];		// buffer interno usato per le conversioni (volatile)
		int		hour;						// ore, minuti, secondi
		int		min;
		int		sec;
		char		hourstr[MAX_DATETIME_BUF + 1];
		char		minstr[MAX_DATETIME_BUF + 1];
		char		secstr[MAX_DATETIME_BUF + 1];
	};

	void				LoadFromString		(const char* pdate,DATEFORMAT datefmt = GMT_SHORT,TIMEFORMAT timefmt = HHMMSS_GMT_SHORT);

	DATE m_Date;
	TIME m_Time;
};

#endif // _CDATETIME_H

⌨️ 快捷键说明

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