TimeEx.h
上传用户:maryhy001
上传日期:2007-05-02
资源大小:2317k
文件大小:7k
源码类别:

网格计算

开发平台:

Visual C++

  1. #ifndef _TIMEEX_H
  2. #define _TIMEEX_H
  3. //#include "AdoLib.h"
  4. #include <math.h> //Math library
  5. #include <assert.h> //assert
  6. #include <windows.h> //windows type defined here
  7. //max date or time string size
  8. #define MAX_DATE_SIZE 16
  9. #define MAX_TIME_SIZE 16
  10. #define VALIN(VAL, Min, Max) ((VAL>=Min && VAL<=Max)?true:false)
  11. typedef enum WEEKDAY{ WD_MONDAY = 0, WD_TUESDAY = 1, WD_WEDNESDAY = 2, 
  12. WD_THURSDAY = 3, WD_FRIDAY = 4, WD_SATURDAY = 5, 
  13. WD_SUNDAY = 6, WD_ERROR = 7
  14. };
  15. /*
  16.  * CTimeEx class --- the eFTP system's base time class
  17.  */
  18. class CDateEx
  19. {
  20. public:
  21. CDateEx(){
  22. this->NowDate();
  23. }
  24. CDateEx(CDateEx &dtDate){
  25. m_unYear = dtDate.Year();
  26. m_unMonth = dtDate.Month();
  27. m_unDay = dtDate.Day();
  28. }
  29. //if the arguments all are zero(0), then class use the current time
  30. CDateEx(UINT unYear, UINT unMonth, UINT unDay){
  31. setValue(unYear, unMonth, unDay);
  32. }
  33. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  34. //modify the year, month and day value
  35. void setValue(UINT unYear, UINT unMonth, UINT unDay){
  36. //store the old value
  37. UINT uny = 0, 
  38. unm = 0, 
  39. und = 0;
  40. if( !VALIN(unYear, 1789, 3000) || 
  41. !VALIN(unMonth, 1, 12)){
  42. throw "invalid arguments...";
  43. }
  44. else{
  45. m_unYear = unYear;
  46. m_unMonth = unMonth;
  47. m_unDay = 1;
  48. }
  49. int nMax = 30;
  50. if(!IsLargeMonth(m_unMonth)){
  51. if(IsLeapYear()){
  52. if(2 == m_unMonth){
  53. nMax = 29;
  54. }
  55. }
  56. else{
  57. if(2 == m_unMonth){
  58. nMax = 28;
  59. }
  60. }
  61. }
  62. else{
  63. nMax = 31;
  64. }
  65. if(!VALIN(unDay, 1, nMax)){
  66. //restore the old value
  67. this->m_unYear = uny; 
  68. this->m_unMonth = unm; 
  69. this->m_unDay = und;
  70. //throw the exception
  71. throw "invalid arguments...";
  72. }
  73. else{
  74. m_unDay = unDay;
  75. }
  76. }
  77. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  78. //operator "="
  79. CDateEx operator=(CDateEx &dtDate);
  80. //operator "=="
  81. bool operator==(CDateEx &dtDate);
  82. //operator "!="
  83. bool operator!=(CDateEx &dtDate);
  84. //operator ">"
  85. bool operator>(CDateEx &dtDate);
  86. //operator ">="
  87. bool operator>=(CDateEx &dtDate);
  88. //operator "<"
  89. bool operator<(CDateEx &dtDate);
  90. //operator "<="
  91. bool operator<=(CDateEx &dtDate);
  92. //operator "-"
  93. int operator-(CDateEx &dtDate);
  94. //operator "++"(add one day)
  95. CDateEx operator++(int);
  96. //operator "--"(sub one day)
  97. CDateEx operator--(int);
  98. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  99. virtual ~CDateEx(){
  100. }
  101. //get the year, month and day value
  102. UINT Year(){
  103. return m_unYear;
  104. }
  105. UINT Month(){
  106. return m_unMonth;
  107. }
  108. UINT Day(){
  109. return m_unDay;
  110. }
  111. //determine the year is leap year
  112. bool IsLeapYear(){
  113. return (m_unYear % 4 == 0) && (m_unYear % 100 != 0) || (m_unYear % 400 == 0);
  114. }
  115. //get current date
  116. void NowDate();
  117. //get the date string text
  118. void AsDString(LPSTR lpzDate, bool bFixedFmt = true);
  119. protected:
  120. //year, month and day members
  121. UINT m_unYear,
  122. m_unMonth,
  123. m_unDay;
  124. //determine the month whether is large month
  125. bool IsLargeMonth(UINT unMonth){
  126. if( unMonth == 1 || unMonth == 3 || unMonth == 5 ||
  127. unMonth == 7 || unMonth == 8 || unMonth == 10 || unMonth == 12){
  128. return true;
  129. }
  130. return false;
  131. }
  132. };
  133. /*
  134.  * CTimeEx class --- now the class only support 0~24 system time
  135. doesn't support AM~PM system time
  136.  */
  137. class CTimeEx
  138. {
  139. public:
  140. //constructor and destructor
  141. CTimeEx(){
  142. this->NowTime();
  143. }
  144. CTimeEx(CTimeEx &dtTime){
  145. m_unHour = dtTime.Hour();
  146. m_unMinu = dtTime.Minute();
  147. m_unSecn = dtTime.Second();
  148. }
  149. //constructor another
  150. CTimeEx(UINT unHour, UINT unMinute, UINT unSecond){
  151. setValue(unHour, unMinute, unSecond);
  152. }
  153. //set hour, minute and second value
  154. void setValue(UINT unHour, UINT unMinute, UINT unSecond){
  155. if( !VALIN(unHour, 0, 23) || 
  156. !VALIN(unMinute, 0, 59) ||
  157. !VALIN(unSecond, 0, 59))
  158. throw "parameters is invalid...";
  159. m_unHour = unHour;
  160. m_unMinu = unMinute;
  161. m_unSecn = unSecond;
  162. }
  163. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  164. //operator "="
  165. CTimeEx operator=(CTimeEx &dtTime);
  166. //operator "=="
  167. bool operator==(CTimeEx &dtTime);
  168. //operator "!="
  169. bool operator!=(CTimeEx &dtTime);
  170. //operator ">"
  171. bool operator>(CTimeEx &dtTime);
  172. //operator ">="
  173. bool operator>=(CTimeEx &dtTime);
  174. //operator "<"
  175. bool operator<(CTimeEx &dtTime);
  176. //operator "<="
  177. bool operator<=(CTimeEx &dtTime);
  178. //operator "-"
  179. DWORD operator-(CTimeEx &dtTime);
  180. //operator "++"(add one second)
  181. CTimeEx operator++(int);
  182. //operator "--"(sub one second)
  183. CTimeEx operator--(int);
  184. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  185. //get hour, minute and second value
  186. UINT Hour(){
  187. return m_unHour;
  188. }
  189. UINT Minute(){
  190. return m_unMinu;
  191. }
  192. UINT Second(){
  193. return m_unSecn;
  194. }
  195. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  196. virtual ~CTimeEx(){
  197. }
  198. //get current time
  199. void NowTime();
  200. //get the time string text
  201. void AsTString(LPSTR lpzTime, bool bFixedFmt = true);
  202. public:
  203. //!!!Reserve info
  204. enum TIMEFMT{TF_AM = 0, TF_PM};
  205. protected:
  206. //hour, minute and second members
  207. UINT m_unHour,
  208. m_unMinu,
  209. m_unSecn;
  210. };
  211. /*
  212.  * CDateTimeEx class --- support the operation of datetime data type
  213.  */
  214. class CDateTimeEx: public CDateEx,
  215. public CTimeEx
  216. {
  217. public:
  218. //constructor and destructor
  219. CDateTimeEx();
  220. //updown inherited static cast change
  221. CDateTimeEx(CDateEx &dtDate);
  222. CDateTimeEx(CTimeEx &dtTime);
  223. //SYSTEMTIME change to CDateTimeEx
  224. CDateTimeEx(const SYSTEMTIME stTime);
  225. //FILETIME change to CDateTimeEx
  226. CDateTimeEx(const FILETIME ftTime);
  227. //DATE change to CDateTimeEx
  228. CDateTimeEx(const DATE dtSrc);
  229. //"struct tm" change to CDateTimeEx
  230. CDateTimeEx(struct tm &tmDest);
  231. //#########################################
  232. //operator "=" --- system time
  233. CDateTimeEx& operator=(const SYSTEMTIME stTime);
  234. //operator "=" --- file time
  235. CDateTimeEx& operator=(const FILETIME ftTime);
  236. //get OleDate
  237. bool getOleDate(struct tm *tmTime);
  238. //day of week
  239. WEEKDAY DayOfWeek();
  240. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  241. //get the now datetime info
  242. void Now();
  243. //get the datetime string text
  244. void AsDTString(LPSTR lpzDate, bool bFixedFmt = true);
  245. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  246. virtual ~CDateTimeEx(){
  247. }
  248. private:
  249. void equalSysTime(const SYSTEMTIME stTime);
  250. void equalFileTime(const FILETIME ftTime);
  251. //get "struct tm" from DATE structor
  252. bool DTFromOleDate(DATE dtSrc, struct tm& tmDest);
  253. //get DATE structor form "struct tm"
  254. bool OleDateFromDT(
  255. WORD wYear, WORD wMonth, WORD wDay,
  256. WORD wHour, WORD wMinute, WORD wSecond, 
  257. DATE& dtDest);
  258. };
  259. #endif //_TIMEEX_H