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

网格计算

开发平台:

Visual C++

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