青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大規模高性能網絡服務器編程 大型游戲服務器編程


大規模高性能網絡服務器編程 大型游戲服務器編程 完成端口模型 TCP UDP P2P 網絡編程

           C++博客 | 首頁 | 發新隨筆 | 發新文章 | 聯系 | 聚合 | 管理

              

[原創]一個有用的Date/DateTime類


這里設計了一個類,通過4個字節存儲日期,8個字節存儲DateTime,并添加了一些跟時間日期相關的函數, 如:星期幾查詢,特定日期之后多少天是幾號, 兩個日期之間相隔多少天等等。對于一般的用途,基本上夠用了

頭文件:
 1 /************************************************************************
 2 *
 3 * Created by kusamba@126.com at 2010-9-2 16:18:43
 4 */
 5 #ifndef _datetime_41210572_h_
 6 #define _datetime_41210572_h_
 7 
 8 
 9 extern int whatday(unsigned long date);
10 extern int whatday(int year, int month, int day);
11 
12 //////////////////////////////////////////////////////////////////////////
13 #pragma pack(push, 1)
14 struct sDate
15 {
16     unsigned short year;
17     unsigned char  month;
18     unsigned char  day;
19 
20     sDate();
21 
22     sDate(int y, int m, int d);
23 
24     //lpcszDate:2006-02-03
25     void Parse(const char* lpcszDate);
26     bool Format(char* lpDate);
27 
28     //lpcszDate:20060203
29     void Parse2(const char* lpcszDate);
30     bool Format2(char* lpDate);
31 
32     void GetCurrentDate();
33 
34     sDate operator-(int days);
35     sDate operator+(int days);
36 
37     friend int DiffDay(sDate& d1, sDate& d2);/*d1 - d2*/
38 };
39 
40 
41 struct sDateTime
42 {
43     unsigned short year;
44     unsigned char  month;
45     unsigned char  day;
46     unsigned char  hour;
47     unsigned char  minute;
48     unsigned char  second;
49 
50     sDateTime();
51 
52     sDateTime(int y, int m, int d, int h, int mi, int s);
53 
54     //lpcszDate:"2006-02-03 05:18:23"
55     void Parse(const char* lpcszDatetime);
56     bool Format(char* lpDateTime);
57 
58     void GetCurrentDateTime();
59 
60     friend int DateTimeDiffDay(sDateTime& d1, sDateTime& d2);/*d1 - d2*/
61     friend int DateTimeDiffHour(sDateTime& d1, sDateTime& d2);/*d1 - d2*/
62     friend int DateTimeDiffMiniute(sDateTime& d1, sDateTime& d2);/*d1 - d2*/
63 };
64 #pragma pack(pop)
65 
66 extern int DiffDay(sDate& d1, sDate& d2);/*d1 - d2*/
67 extern int DateTimeDiffDay(sDateTime& d1, sDateTime& d2);/*d1 - d2*/
68 extern int DateTimeDiffHour(sDateTime& d1, sDateTime& d2);/*d1 - d2*/
69 extern int DateTimeDiffMiniute(sDateTime& d1, sDateTime& d2);/*d1 - d2*/
70 
71 
72 #endif //_datetime_41210572_h_

cpp文件:
  1 #include "stdafx.h"
  2 #include <wtypes.h>
  3 #include <time.h>
  4 #include <math.h>
  5 
  6 #include "datetime.h"
  7 
  8 /************************************************************************
  9 蔡勒公式: 
 10     W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1 
 11 
 12   C是世紀數減一,y是年份后兩位,M是月份,d是日數。
 13   1月和2月要按上一年的13月和14月來算,這時C和y均按上一年取值。
 14 */
 15 int whatday(unsigned long date) // date format: 20070411
 16 {
 17     int year = date / 10000;
 18     int m_d  = date - 10000 * year;
 19     int month= m_d / 100;
 20     int day  = m_d - 100 * month;
 21 
 22     int C = year / 100;
 23     int y = year - C * 100;
 24     int M = month;
 25     int d = day;
 26     if (M == 1)
 27     {
 28         M = 13;
 29         y = y - 1;
 30     }
 31     else if (M == 2)
 32     {
 33         M = 14;
 34         y = y - 1;
 35     }
 36 
 37     int weekday = ((int)(floor(C/4- 2 * C + floor(y/4+ floor(13*(M+1)/5+ d - 1)) % 7;
 38     if (weekday < 0
 39     {
 40         weekday += 7;
 41     }
 42 
 43     return weekday;
 44 }
 45 
 46 int whatday(int year, int month, int day)
 47 {
 48     int C = year / 100;
 49     int y = year - C * 100;
 50     int M = month;
 51     int d = day;
 52     if (M == 1)
 53     {
 54         M = 13;
 55         y = y - 1;
 56     }
 57     else if (M == 2)
 58     {
 59         M = 14;
 60         y = y - 1;
 61     }
 62 
 63     int weekday = ((int)(floor(C/4- 2 * C + floor(y/4+ floor(13*(M+1)/5+ d - 1)) % 7;
 64     if (weekday < 0
 65     {
 66         weekday += 7;
 67     }
 68 
 69     return weekday;
 70 }
 71 
 72 //////////////////////////////////////////////////////////////////////////
 73 #define SECOND_PER_DAY    (24*60*60)
 74 #define SECOND_PER_HOUR    (60*60)
 75 #define SECOND_PER_MIN    (60)
 76 //////////////////////////////////////////////////////////////////////////
 77 //////////////////////////////////////////////////////////////////////////
 78 sDate::sDate()
 79 {
 80     SYSTEMTIME st;
 81     GetLocalTime(&st);
 82 
 83     year  = (unsigned short)st.wYear;
 84     month = (unsigned char )st.wMonth;
 85     day      = (unsigned char )st.wDay;
 86 }
 87 
 88 sDate::sDate(int y, int m, int d)
 89 {
 90     year = y;
 91     month= m;
 92     day  = d;
 93 }
 94 
 95 //lpcszDate:2006-02-03
 96 void sDate::Parse(const char* lpcszDate)
 97 {
 98     if (NULL == lpcszDate)return;
 99 
100     int tYear, tMonth, tDay;
101     sscanf(lpcszDate, "%d-%d-%d"&tYear, &tMonth, &tDay);
102 
103     year = tYear;
104     month = tMonth;
105     day = tDay;
106 }
107 
108 bool sDate::Format(char* lpDate)
109 {
110     if (NULL == lpDate)
111         return false;
112 
113     sprintf(lpDate, "%d-%02d-%02d", year, month, day);
114     return true;
115 }
116 
117 //lpcszDate:20060203
118 void sDate::Parse2(const char* lpcszDate)
119 {
120     if (NULL == lpcszDate)return;
121 
122     int tYear, tMonth, tDay;
123     sscanf(lpcszDate, "%d%d%d"&tYear, &tMonth, &tDay);
124 
125     year = tYear;
126     month = tMonth;
127     day = tDay;
128 }
129 
130 bool sDate::Format2(char* lpDate)
131 {
132     if (NULL == lpDate)
133         return false;
134 
135     sprintf(lpDate, "%d%02d%02d", year, month, day);
136     return true;
137 }
138 
139 void sDate::GetCurrentDate()
140 {
141     SYSTEMTIME st;
142     GetLocalTime(&st);
143 
144     year  = (unsigned short)st.wYear;
145     month = (unsigned char )st.wMonth;
146     day      = (unsigned char )st.wDay;
147 }
148 
149 sDate sDate::operator-(int days)
150 {
151     struct tm t1;
152     memset(&t1, 0sizeof(tm));
153 
154     t1.tm_year = year - 1900;
155     t1.tm_mon  = month - 1;
156     t1.tm_mday = day;
157     
158     time_t t_1 = mktime(&t1);
159     t_1 -= SECOND_PER_DAY * days;
160 
161     t1 = *localtime(&t_1);
162     
163     sDate newDate;
164     newDate.year = t1.tm_year + 1900;
165     newDate.month= t1.tm_mon + 1;
166     newDate.day  = t1.tm_mday;
167 
168     return newDate;
169 }
170 
171 sDate sDate::operator+(int days)
172 {
173     struct tm t1;
174     memset(&t1, 0sizeof(tm));
175 
176     t1.tm_year = year - 1900;
177     t1.tm_mon  = month - 1;
178     t1.tm_mday = day;
179     
180     time_t t_1 = mktime(&t1);
181     t_1 += SECOND_PER_DAY * days;
182 
183     t1 = *localtime(&t_1);
184     
185     sDate newDate;
186     newDate.year = t1.tm_year + 1900;
187     newDate.month= t1.tm_mon + 1;
188     newDate.day  = t1.tm_mday;
189     
190     return newDate;
191 }
192 
193 //////////////////////////////////////////////////////////////////////////
194 //////////////////////////////////////////////////////////////////////////
195 sDateTime::sDateTime()
196 {
197     SYSTEMTIME st;
198     GetLocalTime(&st);
199 
200     year  = (unsigned short)st.wYear;
201     month = (unsigned char )st.wMonth;
202     day      = (unsigned char )st.wDay;
203     hour  = (unsigned char )st.wHour;
204     minute= (unsigned char )st.wMinute;
205     second= (unsigned char )st.wSecond;
206 }
207 
208 sDateTime::sDateTime(int y, int m, int d, int h, int mi, int s)
209 {
210     year = y;
211     month= m;
212     day  = d;
213     hour = h;
214     minute=mi;
215     second=s;
216 }
217 
218 //lpcszDate:"2006-02-03 05:18:23"
219 void sDateTime::Parse(const char* lpcszDatetime)
220 {
221     if(NULL == lpcszDatetime) return;
222 
223     int tYear, tMonth, tDay, tHour, tMin, tSecond;
224     sscanf(lpcszDatetime, "%d-%d-%d %d:%d:%d"&tYear, &tMonth, &tDay, &tHour, &tMin, &tSecond);
225 
226     year = tYear;
227     month = tMonth;
228     day = tDay;
229     hour = tHour;
230     minute = tMin;
231     second = tSecond;
232 }
233 
234 bool sDateTime::Format(char* lpDateTime)
235 {
236     if (NULL == lpDateTime)
237         return false;
238 
239     sprintf(lpDateTime, "%d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second);
240     return true;
241 }
242 
243 void sDateTime::GetCurrentDateTime()
244 {
245     SYSTEMTIME st;
246     GetLocalTime(&st);
247 
248     year  = (unsigned short)st.wYear;
249     month = (unsigned char )st.wMonth;
250     day      = (unsigned char )st.wDay;
251     hour  = (unsigned char )st.wHour;
252     minute= (unsigned char )st.wMinute;
253     second= (unsigned char )st.wSecond;
254 }
255 
256 //////////////////////////////////////////////////////////////////////////
257 //////////////////////////////////////////////////////////////////////////
258 int DiffDay(sDate& d1, sDate& d2)
259 {
260     tm time1, time2;
261     memset(&time1, 0sizeof(time1));
262     memset(&time2, 0sizeof(time2));
263 
264     time1.tm_year = d1.year - 1900;
265     time1.tm_mon = d1.month - 1;
266     time1.tm_mday = d1.day;
267 
268     time2.tm_year = d2.year - 1900;
269     time2.tm_mon = d2.month - 1;
270     time2.tm_mday = d2.day;
271 
272     time_t t1 = mktime(&time1);
273     time_t t2 = mktime(&time2);
274 
275     return (int)(difftime(t1, t2)+SECOND_PER_DAY-1)/SECOND_PER_DAY;
276 }
277 
278 int DateTimeDiffDay(sDateTime& d1, sDateTime& d2)
279 {
280     tm time1, time2;
281     memset(&time1, 0sizeof(time1));
282     memset(&time2, 0sizeof(time2));
283 
284     time1.tm_year = d1.year - 1900;
285     time1.tm_mon = d1.month - 1;
286     time1.tm_mday = d1.day;
287 
288     time2.tm_year = d2.year - 1900;
289     time2.tm_mon = d2.month - 1;
290     time2.tm_mday = d2.day;
291 
292     time_t t1 = mktime(&time1);
293     time_t t2 = mktime(&time2);
294 
295     return (int)(difftime(t1, t2)+SECOND_PER_DAY-1)/SECOND_PER_DAY;
296 }
297 
298 int DateTimeDiffHour(sDateTime& d1, sDateTime& d2)
299 {
300     tm time1, time2;
301     memset(&time1, 0sizeof(time1));
302     memset(&time2, 0sizeof(time2));
303 
304     time1.tm_year = d1.year - 1900;
305     time1.tm_mon = d1.month - 1;
306     time1.tm_mday = d1.day;
307     time1.tm_hour = d1.hour;
308 
309     time2.tm_year = d2.year - 1900;
310     time2.tm_mon = d2.month - 1;
311     time2.tm_mday = d2.day;
312     time2.tm_hour = d2.hour;
313 
314     time_t t1 = mktime(&time1);
315     time_t t2 = mktime(&time2);
316 
317     return (int)(difftime(t1, t2)+SECOND_PER_HOUR - 1)/SECOND_PER_HOUR;
318 }
319 
320 int DateTimeDiffMiniute(sDateTime& d1, sDateTime& d2)
321 {
322     tm time1, time2;
323     memset(&time1, 0sizeof(time1));
324     memset(&time2, 0sizeof(time2));
325 
326     time1.tm_year = d1.year - 1900;
327     time1.tm_mon = d1.month - 1;
328     time1.tm_mday = d1.day;
329     time1.tm_hour = d1.hour;
330     time1.tm_min = d1.minute;
331 
332     time2.tm_year = d2.year - 1900;
333     time2.tm_mon = d2.month - 1;
334     time2.tm_mday = d2.day;
335     time2.tm_hour = d2.hour;
336     time2.tm_min = d2.minute;
337 
338     time_t t1 = mktime(&time1);
339     time_t t2 = mktime(&time2);
340 
341     return (int)(difftime(t1, t2)+SECOND_PER_MIN-1)/SECOND_PER_MIN;
342 }
343 

下載代碼:DataTime.rar

posted on 2010-09-02 16:28 iKusamba 閱讀(1967) 評論(4)  編輯 收藏 引用 所屬分類: C++技術

評論

# re: [原創]一個有用的Date/DateTime類 2010-09-02 17:29 kevin.c

您這寫的是C++還是C。。。  回復  更多評論   

# re: [原創]一個有用的Date/DateTime類 2010-09-02 20:43 cpp

"stdafx.h"  回復  更多評論   

# re: [原創]一個有用的Date/DateTime類 2010-09-08 00:21 匿了

@kevin.c
是C--  回復  更多評論   

# re: [原創]一個有用的Date/DateTime類 2012-07-13 02:59 net_flasher

boost中已經提供了date,time相關的內容,沒有必要發明輪子了。  回復  更多評論   

公告

導航

隨筆分類

最新隨筆

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧洲99久久| 国产一区再线| 欧美大片在线影院| 国产美女精品视频| 日韩视频在线一区二区三区| 亚洲国产日韩在线| 欧美在线免费观看视频| 亚洲一区二区免费看| 欧美成人综合在线| 欧美福利一区二区| 狠狠入ady亚洲精品经典电影| 亚洲夜间福利| 新狼窝色av性久久久久久| 欧美视频免费| 这里只有精品电影| 亚洲一级网站| 欧美午夜欧美| 一本久久a久久精品亚洲| 亚洲少妇诱惑| 欧美日韩中文字幕在线视频| aⅴ色国产欧美| 亚洲视频中文字幕| 欧美日韩日日骚| 日韩视频一区二区在线观看 | 欧美日本在线看| 欧美激情一区二区三区在线| 蜜臀va亚洲va欧美va天堂| 免费在线亚洲欧美| 国产一区高清视频| 亚洲欧美日韩一区二区三区在线| 亚洲日本乱码在线观看| 久热精品在线| 久久嫩草精品久久久久| 国产精品午夜在线观看| 国产精品99久久99久久久二8| 中文一区字幕| 欧美三日本三级少妇三99| 亚洲日本欧美| 日韩特黄影片| 欧美精品一区三区| 亚洲国产精品一区二区www| 最新国产の精品合集bt伙计| 欧美精品观看| 一区二区三区日韩欧美精品| 亚洲一级片在线看| 国产精品日韩欧美综合| 午夜久久久久久久久久一区二区| 久久av一区二区三区漫画| 狠久久av成人天堂| 美国十次成人| 日韩午夜av电影| 性欧美暴力猛交69hd| 欧美日韩人人澡狠狠躁视频| 一区二区国产在线观看| 小辣椒精品导航| 狠狠入ady亚洲精品经典电影| 玖玖国产精品视频| 亚洲人成在线免费观看| 亚洲一区二区欧美日韩| 国产精品一二三视频| 久久精品成人欧美大片古装| 欧美国产一区二区三区激情无套| 99re66热这里只有精品3直播| 国产精品国产亚洲精品看不卡15| 欧美一级一区| 亚洲黄网站在线观看| 中文日韩在线| 在线观看一区欧美| 欧美日韩高清在线观看| 欧美夜福利tv在线| 亚洲国产精品99久久久久久久久| 亚洲主播在线播放| 在线成人性视频| 欧美日韩久久不卡| 久久精品国产清高在天天线| 亚洲三级色网| 久久免费的精品国产v∧| 亚洲乱码国产乱码精品精98午夜 | 欧美精品在线观看| 亚洲影音一区| 亚洲国产精品久久人人爱蜜臀| 午夜精品美女自拍福到在线| 亚洲国产欧美一区| 国产精品亚洲激情| 欧美激情a∨在线视频播放| 欧美一级视频免费在线观看| 亚洲精品免费电影| 蜜桃av一区二区三区| 性感少妇一区| 亚洲精品乱码久久久久久蜜桃麻豆 | 日韩视频一区二区三区| 久久久精品动漫| 亚洲视频自拍偷拍| 亚洲激情二区| 极品少妇一区二区三区| 国产精品区一区二区三| 欧美乱妇高清无乱码| 久久久久**毛片大全| 亚洲午夜日本在线观看| 亚洲国产精品一区二区第一页 | 欧美在线一二三四区| 一区二区三区欧美| 亚洲国产专区| 久久国产欧美日韩精品| 99视频日韩| 亚洲精品日韩综合观看成人91| 一区视频在线| 国内精品免费在线观看| 国产欧美日韩精品专区| 国产精品视频免费一区| 欧美午夜精品一区| 国产精品jizz在线观看美国| 欧美日韩精品一区二区三区四区| 欧美 日韩 国产一区二区在线视频 | 久久久欧美一区二区| 久久精品视频播放| 久久精品在这里| 性欧美暴力猛交69hd| 午夜精品久久久久久久男人的天堂| 亚洲视频图片小说| 亚洲老司机av| 亚洲一区二区三| 亚洲一区二区三区视频| 亚洲影院高清在线| 香蕉久久一区二区不卡无毒影院| 亚洲欧美中文日韩v在线观看| 亚洲性图久久| 久久国产直播| 老司机午夜精品| 欧美成人影音| 亚洲国产欧美一区二区三区同亚洲| 亚洲国产高清aⅴ视频| 亚洲激情视频在线| 最新日韩av| 欧美寡妇偷汉性猛交| 亚洲精品国产精品乱码不99| 一区二区三区色| 午夜日韩电影| 毛片av中文字幕一区二区| 欧美精品一区在线发布| 欧美日韩福利在线观看| 国产精品久久久一区麻豆最新章节| 欧美女主播在线| 欧美国产高清| 国产一区999| 亚洲精品自在久久| 午夜精品久久久久久久久久久久| 久久美女性网| 亚洲国产日韩欧美一区二区三区| 99综合视频| 久久久久久尹人网香蕉| 欧美激情综合亚洲一二区 | 久久综合图片| 国产精品久久久免费| 激情综合中文娱乐网| 一区二区欧美日韩视频| 欧美一区二区三区在线观看| 欧美v国产在线一区二区三区| 亚洲人成在线播放网站岛国| 亚洲一区二区在线视频| 免费日韩视频| 国产欧美一二三区| 91久久亚洲| 老牛嫩草一区二区三区日本| 日韩天堂在线观看| 久久亚洲精品中文字幕冲田杏梨| 欧美视频官网| 亚洲国产成人高清精品| 午夜精品久久一牛影视| 欧美激情第五页| 久久er精品视频| 国产精品sss| 伊人久久大香线蕉综合热线| 久久99在线观看| 一区二区高清在线| 蜜桃av一区二区| 国产色产综合产在线视频| 亚洲天堂黄色| 亚洲国产婷婷香蕉久久久久久| 欧美一区国产一区| 国产精品二区在线观看| 日韩视频一区二区三区在线播放免费观看 | 国产日韩欧美在线播放| 日韩亚洲国产欧美| 欧美国产视频一区二区| 欧美自拍偷拍| 国产有码在线一区二区视频| 亚洲欧美在线视频观看| 99国产精品| 欧美黄色aa电影| 欲香欲色天天天综合和网| 亚洲欧美精品在线观看| 亚洲精品国产精品久久清纯直播 | 亚洲一区视频在线观看视频| 欧美日韩亚洲成人| 99精品视频免费在线观看| 亚洲第一色在线| 嫩草国产精品入口| 亚洲国产综合在线| 欧美国产精品劲爆|