• <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>

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


            大規模高性能網絡服務器編程 大型游戲服務器編程 完成端口模型 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 閱讀(1941) 評論(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相關的內容,沒有必要發明輪子了。  回復  更多評論   

            公告

            導航

            隨筆分類

            最新隨筆

            最新評論

            閱讀排行榜

            久久综合伊人77777| 国产精品美女久久久久| 亚洲午夜福利精品久久| 久久精品成人欧美大片| 久久精品国产91久久麻豆自制| 亚洲综合精品香蕉久久网97| 伊人久久一区二区三区无码| 99久久er这里只有精品18| 久久久青草青青国产亚洲免观| 久久午夜羞羞影院免费观看| 精品无码人妻久久久久久| 无码国内精品久久人妻蜜桃 | 久久99国产精品久久久| 久久无码国产| 伊人久久综合热线大杳蕉下载| 久久精品国产亚洲AV香蕉| 久久av免费天堂小草播放| 久久久精品2019免费观看| 亚洲日韩欧美一区久久久久我| 青青青青久久精品国产| 国产V综合V亚洲欧美久久| 午夜欧美精品久久久久久久| 人人狠狠综合久久亚洲高清| 久久电影网一区| 国产精品久久久久…| 久久精品国产亚洲77777| 久久精品中文字幕一区| 性高湖久久久久久久久AAAAA| 51久久夜色精品国产| 精品久久久久久国产91| 久久AV高清无码| 久久精品人成免费| 亚洲AV无码久久精品蜜桃| 国产毛片欧美毛片久久久| 狠狠色婷婷久久一区二区| 久久精品国产免费观看三人同眠| 欧洲性大片xxxxx久久久| 久久久网中文字幕| 亚洲精品乱码久久久久久蜜桃| 久久人妻少妇嫩草AV无码蜜桃| 国产精品成人久久久久久久|