在個人命名空間TYCppStdLib中對於日期和時間的操做很是豐富。 共有六個類和一組全局函數。 六個類分別是: CDate CTime CDateAndTime CMyDate CMyTime CMyDateAndTime 前三個類不帶類的成員變量,直接操做用戶給定的數據。 前三個類的成員函數與全局函數一一對應。 後三個類帶類的成員變量,成員函數操做類的成員變量。 如今發佈的是CDate類(基類,完成基本功能,待更新)。
/*- ========================================================== * 文件名 :CDate.h * 開發人員:袁培榮 * 當前版本:1.0.0.2595 * 建立時間:2012-04-23 * 修改時間:2012-05-01 * 功能說明:日期類(基類) * 版權說明:版權全部 袁培榮 YuanPeirong * 編譯環境:Windows 7(x64) SP1 簡體中文專業版 * 編譯器: Visual Studio 2010 SP1(中文旗艦版) MinGW 2011118 Visual C++ 6.0 SP6(中文企業版) - ==========================================================*/ #ifndef CDate_H_TYCppStdLib #define CDate_H_TYCppStdLib #ifdef CDate_DLL_API #else #define CDate_DLL_API _declspec(dllimport) #endif #include <string> #include "Windows.h" using namespace std; namespace TYCppStdLib { class CDate_DLL_API CDate { public: CDate(); virtual ~CDate(); virtual int GetYear(); // 獲取年 virtual int GetMonth(); // 獲取月 virtual int GetDay(); // 獲取日 virtual bool SetYear(int year); // 設置年 virtual bool SetMonth(int month); // 設置月 virtual bool SetDay(int day); // 設置日 // 獲取日期 virtual void GetDate(int &year,int &month,int &day); //virtual string GetDate(const string strDivide="-"); //virtual void GetDate(char *dates,char *divide="-"); //virtual void GetDate(CMyDate &ob); // 設置日期 virtual bool SetDate(int year,int month,int day); //virtual bool SetDate(char *dates); // 檢查日期是否合法 virtual bool DateIsValid(int year,int month,int day); // 判斷閏年 virtual bool IsLeapYear(int year=0); // 計算某年天數 virtual int GetDaysOfYear(int year=0); //計算某年某月天數 virtual int GetDaysOfMonth(int year=0,int month=0); // 獲取本年已過天數 virtual int GetDaysOver(int year,int month,int day); }; } #endif
/*- ========================================================== * 文件名 :CDate.cpp * 開發人員:袁培榮 * 當前版本:1.0.0.2595 * 建立時間:2012-04-23 * 修改時間:2012-05-01 * 功能說明:日期類(基類) * 版權說明:版權全部 袁培榮 YuanPeirong * 編譯環境:Windows 7(x64) SP1 簡體中文專業版 * 編譯器: Visual Studio 2010 SP1(中文旗艦版) MinGW 2011118 Visual C++ 6.0 SP6(中文企業版) - ==========================================================*/ #ifndef CDate_DLL_ForAPI #define CDate_DLL_ForAPI #define CDate_DLL_API _declspec(dllexport) #endif #include "../../Include/DateAndTime/CDate.h" //#include "stdio.h" // #include <cstdio> //#include "string.h" // #include <cstring> // #include <cstdlib> //using std::sprintf; // using std::strcat; // using std::strcpy; /* typedef struct _SYSTEMTIME { // st WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME; */ //構造函數 TYCppStdLib::CDate::CDate() { //空函數 } //析構函數 TYCppStdLib::CDate::~CDate() { //空函數 } // 獲取年 int TYCppStdLib::CDate::GetYear() { SYSTEMTIME st; GetLocalTime(&st); return st.wYear; } // 獲取月 int TYCppStdLib::CDate::GetMonth() { SYSTEMTIME st; GetLocalTime(&st); return st.wMonth; } // 獲取日 int TYCppStdLib::CDate::GetDay() { SYSTEMTIME st; GetLocalTime(&st); return st.wDay; } // 設置年 bool TYCppStdLib::CDate::SetYear(int year) { SYSTEMTIME st; if(year<1970) return false; GetLocalTime(&st); st.wYear=year; if(SetLocalTime(&st)) return true; return false; } // 設置月 bool TYCppStdLib::CDate::SetMonth(int month) { SYSTEMTIME st; if(month<1 || month>12) return false; GetLocalTime(&st); st.wMonth=month; if(SetLocalTime(&st)) return true; return false; } // 設置日 bool TYCppStdLib::CDate::SetDay(int day) { SYSTEMTIME st; int t; GetLocalTime(&st); t=GetDaysOfMonth(); if(day<1 || day>t) return false; st.wDay=day; if(SetLocalTime(&st)) return true; return false; } // 獲取日期 void TYCppStdLib::CDate::GetDate(int &year,int &month,int &day) { year=GetYear(); month=GetMonth(); day=GetDay(); } // void TYCppStdLib::CDate::GetDate(char *dates,char *divide="-") // { // int year, month, day; // char *cyear, *cmonth ,*cday; // year=GetYear(); // month=GetMonth(); // day=GetDay(); // strcpy(dates,year,4,RIGHTSIDE,'0',divide); // strcat(dates,month,2,RIGHTSIDE,'0',divide); // strcat(dates,day,2,RIGHTSIDE,'0'); // sprintf(cyear, "%d", year); // sprintf(cmonth, "%d", month); // sprintf(cday, "%d", day); // itoa(year, cyear, 10); // itoa(month, cmonth, 10); // itoa(day, cday, 10); // strcpy(dates, cyear); // strcat(dates, divide); // strcat(dates, month); // strcat(dates, divide); // strcat(dates, day); // } // void TYCppStdLib::CDate::GetDate(CDate &ob) // { // } // 設置日期 bool TYCppStdLib::CDate::SetDate(int year,int month,int day) { if(!SetYear(year)) return false; if(!SetMonth(month)) return false; return SetDay(day); } // bool TYCppStdLib::CDate::SetDate(char *dates) // { // } // 檢查日期是否合法 bool TYCppStdLib::CDateAndTime::DateIsValid(int year,int month,int day) { if(year<0 || day<1) return false; if(month<1 || month>12) return false; int MaxDay=GetDaysOfMonth(year, month); if(day>MaxDay) return false; return true; } // 判斷閏年 bool TYCppStdLib::CDateAndTime::IsLeapYear(int year) { if(year<0) return false; if(!year) { SYSTEMTIME st; GetLocalTime(&st); year=st.wYear; } if((year%4==0 && year%100!=0) || year%400==0) return true; return false; } // 計算某年天數 int TYCppStdLib::CDateAndTime::GetDaysOfYear(int year) { SYSTEMTIME st; GetLocalTime(&st); if(!year) year=st.wYear; if(year<0) return 0;//return false; if(IsLeapYear(year)) return 366; else return 365; } //計算某年某月天數 int TYCppStdLib::CDateAndTime::GetDaysOfMonth(int year,int month) { SYSTEMTIME st; GetLocalTime(&st); int day, leap; if(!month) month=st.wMonth; if(!year) year=st.wYear; if(year<1970) return 0;//return false; if (month<1 || month>12) return 0;//return false; if(IsLeapYear(year)) leap=1; else leap=0; day=31; //默認31天 switch (month) { case 4: case 6: case 9: case 11: day=30; break; case 2: day=28+leap; break; } return day; }