• 标准C++写的DateTime对象


    头文件

      1#pragma once
      2//#include <eh.h>
      3#include <windows.h>
      4#include <string>
      5#include <stdio.h>
      6#include <time.h>
      7using namespace std;
      8
      9namespace HongYing
     10{
     11
     12    namespace IO
     13    {
     14
     15        class FileStream
     16        {
     17        public:
     18            FileStream(void);
     19            FileStream(const char * filePath);
     20            void Open(const char * filePath,int mode);
     21            void Close(void);
     22            char Putc(char c); //写入一个字符到流中。
     23            char Getc();//从流中读入一个字符。
     24            void Seek(long offset,int seek_origin);//定位到流中指定的位置以字节为单位,成功返回 0
     25            char * Gets(char * buffer,int maxCount) ; //从流中读一行或指定个字符 失败返回NULL
     26            void Puts(char * buffer) ;//写一个行字符串到流中;
     27            int End();
     28            int Error();
     29            void Rewind();//其实本函数相当于fseek(fp,0L,SEEK_SET);
     30            int Read(void *buffer,size_t size,size_t count);//从流中读指定块数的字符,反回实际读入的块数 size 为块的大小,count 要读的块数
     31            int Write(void *buffer,size_t size,size_t count);//向流中写指定的数据
     32            FILE * GetFilePtr(void);
     33        public:
     34            ~FileStream(void);
     35        private:
     36            // 文件指针
     37            FILE *file;
     38        }
    ;
     39        class File
     40        {
     41        public:
     42            File(void);
     43            static FileStream Open(const char * filePath,int mode);
     44            static FileStream Create(const char * filePath);
     45            static int Delete(const char *filePath);
     46            static FileStream CreateTempFile();
     47        public:
     48            ~File(void);
     49        }
    ;
     50
     51        class OpenFileMode
     52        {
     53        public:
     54            OpenFileMode(void);
     55        public:
     56            ~OpenFileMode(void);
     57        public:
     58            // 打开一个用于读取的文本文件
     59            static const int TxtOpenRead = 0;
     60            //创建一个用于写入的文本文件
     61            static const int TxtCreateWrite = 1;
     62            //附加到一个文本文件
     63            static const int TxtAppend = 2;
     64            //打开一个用于读/写的文本文件
     65            static const int TxtOpenReadOrWrite = 3;
     66            //创建一个用于读/写的文本文件
     67            static const int TxtCreateReadOrWrite = 4;
     68            //打开一个用于读/写的文本文件
     69            static const int TxtOpenAppendReadOrWrite=5;
     70            //打开一个用于读取的二进制文件
     71            static const int BitOpenRead = 6;
     72            //创建一个用于写入的二进制文件
     73            static const int BitCreateWrite = 7;
     74            //附加到一个二进制文件
     75            static const int BitAppend = 8;
     76            //打开一个用于读/写的二进制文件
     77            static const int BitOpenReadOrWrite = 9;
     78            //创建一个用于读/写的二进制文件
     79            static const int BitCreateReadOrWrite = 10;
     80            //打开一个用于读/写的二进制文件
     81            static const int BitOpenAppendReadOrWrite =11;
     82            //得到打开文件mode的字符串
     83            static const char * GetModeStr(int mode);
     84
     85        }
    ;
     86
     87        class Exception
     88        {
     89        public:
     90            Exception();
     91            Exception(char *msg,DWORD errorNo, char *file,char *function,int l);
     92            DWORD ErrorNo;//错误号
     93            char Message[MAX_PATH];//错误信息
     94            char FilePath[MAX_PATH];//错误文件路径
     95            char Fun[MAX_PATH];//错误函数名
     96            EXCEPTION_POINTERS PException_poists;
     97            INT line;
     98        public:
     99            static void Trans_func( unsigned int u, EXCEPTION_POINTERS *pExp );
    100            static void Init();//初始化异常
    101            string ToString();
    102        public:
    103            ~Exception();
    104
    105
    106        }
    ;
    107        #define THROW_EX(Msg,errorNo) throw  Exception(Msg,errorNo,__FILE__,__FUNCTION__,__LINE__);
    108    }

    109    namespace Object
    110    {
    111    class Object
    112    {
    113    public:
    114        Object(void);
    115        virtual bool Equals(const Object *object= 0;
    116        virtual int CompareTo(const Object *value) = 0;
    117        virtual std::string ToString() = 0 ;
    118
    119    public:
    120        ~Object(void);
    121    }
    ;
    122
    123    class DateTime :public Object
    124    {
    125    public:    
    126        DateTime(time_t seconds);
    127        DateTime(int year,int month,int day);
    128        DateTime(int year,int month,int day,int hour,int minute,int second);
    129        DateTime(std::string datetimeStr);//日期字符串格式 年/月/日 时:分:秒 例:2008/02/03 9:30:20 出错返回 01/01/1970 00:00:00
    130        DateTime(std::string datetimeStr,std::string formaterStr);
    131    private:
    132        time_t seconds;//自1970起的秒数
    133        tm date;
    134    public:
    135        void AddYears(const time_t years); //将指定的年份数加到此实例的值上。  
    136        void AddMonths(const time_t Months);//将指定的月份数加到此实例的值上。  
    137        void AddDays(const time_t days); //将指定的天数加到此实例的值上。 
    138        void AddHours(const time_t hours);//将指定的小时数加到此实例的值上。 
    139        void AddMinutes(const time_t minutes);//将指定的分钟数加到此实例的值上。  
    140        void AddSeconds(const time_t seconds); //将指定的秒数加到此实例的值上。
    141        void AddWeeks(const time_t weeks);//将指定的周数加到些实上的值上。
    142        static int Compare(const DateTime *value1,const DateTime *value2);//对两个 DateTime 的实例进行比较,并返回一个指示第一个实例是早于、等于还是晚于第二个实例的整数。  返回值:小于零 value1 小于 value2。 零 value1 等于 value2。 大于零 value1 大于 value2。 
    143        int CompareTo(const Object *value);//已重载。 将此实例的值与指定的 DateTime 值相比较,并指示此实例是早于、等于还是晚于指定的 DateTime 值。  
    144        int CompareTo(const DateTime *value);//小于零 此实例小于 value。 零 此实例等于 value。 大于零 此实例大于 value。 
    145
    146
    147        int DaysInMonth(const int year,const int months);//返回指定年和月中的天数。    
    148        bool Equals(const Object *object);
    149        bool Equals(const DateTime *dateTime);
    150        static bool Equals(const DateTime *value1,const DateTime *value2);
    151        static DateTime Parse(std::string datetimeStr);//日期字符串格式 月/日/年 时:分:秒 例:02/03/2008 9:30:20 出错返回 01/01/1970 00:00:00
    152        static DateTime Parse(std::string dateTimeStr,std::string formaterStr);
    153        std::string ToShortDateString();//将当前 DateTime 对象的值转换为其等效的短日期字符串表示形式。  
    154        std::string ToString();
    155        std::string ToString(const std::string formaterStr);//formaterStr = "%Y-%m-%d %H:%M:%S" %Y=年 %m=月 %d=日 %H=时 %M=分 %S=秒
    156    public:        
    157        int GetYear();//获取此实例所表示日期的年份部分。
    158        int GetMonth();//获取此实例所表示日期的年份部分。
    159        int GetDay();// 获取此实例所表示的日期为该月中的第几天。
    160        int GetHour();//获取此实例所表示日期的小时部分。 
    161        int GetMinute();//获取此实例所表示日期的分钟部分
    162        int GetSecond();//获取此实例所表示日期的秒部分。 
    163        int DayOfWeek(); //获取此实例所表示的日期是星期几。
    164        int DayOfYear();//记录今天是一年里面的第几天,从1月1日起,0-365
    165        static DateTime GetNow(); //返回当前日期是间
    166    public:
    167        bool operator == (DateTime &dateTime);
    168        bool operator > (DateTime &dateTime);
    169        bool operator < (DateTime &DateTime);
    170        bool operator >= (DateTime &DateTime);
    171        bool operator <= (DateTime &DateTime);
    172        bool operator != (DateTime &DateTime);
    173
    174    private:
    175        void InitByStr(std::string dateTimeStr,std::string formaterStr);
    176    public:
    177        ~DateTime(void);
    178    }
    ;
    179
    180
    181
    182
    183    }

    184}

    185

    CPP文件

      1#include "StdAfx.h"
      2#include "HongYing.h"
      3namespace HongYing
      4{
      5    namespace Object
      6    {
      7        DateTime::DateTime(const time_t seconds)
      8        {
      9            this->seconds = seconds;
     10            this->date = *localtime(&this->seconds);
     11        }

     12        DateTime::DateTime(int year,int month,int day)
     13        {
     14            tm t;
     15            t.tm_year = year-1900;
     16            t.tm_mon = month-1;
     17            t.tm_mday = day;
     18            t.tm_hour = 0;
     19            t.tm_min = 0;
     20            t.tm_sec = 0;
     21            this->seconds = mktime(&t);
     22            this->date = *localtime(&this->seconds);
     23
     24        }

     25        DateTime::DateTime(int year,int month,int day,int hour,int minute,int second)
     26        {
     27            tm t;
     28            t.tm_year = year-1900;
     29            t.tm_mon = month-1;
     30            t.tm_mday = day;
     31            t.tm_hour = hour;
     32            t.tm_min = minute;
     33            t.tm_sec = second;
     34            this->seconds = mktime(&t);
     35            this->date = *localtime(&this->seconds);
     36
     37        }

     38
     39        DateTime::DateTime(std::string datetimeStr) //日期字符串格式 月/日/年 时:分:秒 例:02/03/2008 9:30:20 出错返回 01/01/1970 00:00:00
     40        {
     41            this->InitByStr(datetimeStr,"%d/%d/%d %d:%d:%d");
     42        }

     43        DateTime::DateTime(std::string datetimeStr,std::string formaterStr)
     44        {
     45            this->InitByStr(datetimeStr,formaterStr);
     46        }

     47        DateTime DateTime::Parse(std::string datetimeStr)
     48        {
     49
     50            DateTime datetime(datetimeStr);
     51            return datetime;
     52        }

     53        DateTime DateTime::Parse(const std::string datetimeStr,const std::string formaterStr)
     54        {
     55            DateTime datetime(datetimeStr,formaterStr);
     56            return datetime;
     57        }

     58
     59
     60        void DateTime::InitByStr(std::string dateTimeStr,std::string formaterStr)
     61        {
     62            int year,month,day,hour,minutes,seconds;
     63            sscanf(dateTimeStr.c_str(),formaterStr.c_str(),&year,&month,&day,&hour,&minutes,&seconds);    
     64            if(year <1900) year = 1970;
     65            if(month <0) month = 1;
     66            if(day <0) day = 1;
     67            if(hour <0) hour = 0;
     68            if(minutes <0) minutes = 0;
     69            if(seconds <0) seconds = 0;
     70            tm t;
     71            t.tm_year = year-1900;
     72            t.tm_mon = month-1;
     73            t.tm_mday = day;
     74            t.tm_hour = hour;
     75            t.tm_min = minutes;
     76            t.tm_sec = seconds;
     77            this->seconds = mktime(&t);
     78            this->date = *localtime(&this->seconds);
     79        }

     80        int DateTime::DayOfWeek()
     81        {
     82            return this->date.tm_wday;
     83        }

     84        int DateTime::DayOfYear()
     85        {
     86            return this->date.tm_yday;
     87        }

     88        int DateTime::DaysInMonth(const int year,const int months)
     89        {
     90            return 0;
     91        }

     92
     93        bool DateTime::Equals(const Object *object)
     94        {
     95            DateTime *dateTime = (DateTime *)object;
     96            if(this->seconds == dateTime->seconds)
     97                return true;
     98            return false;
     99        }

    100
    101        bool DateTime::Equals(const DateTime *dateTime)
    102        {
    103            return this->Equals((Object *)dateTime);
    104        }

    105
    106        bool DateTime::Equals(const DateTime *value1,const DateTime *value2)
    107        {
    108            if(value1->seconds == value2->seconds)
    109                return true;
    110            return false;
    111        }

    112        int DateTime::GetDay()
    113        {    
    114            return this->date.tm_mday;;
    115        }

    116
    117        int DateTime::GetHour()
    118        {
    119            return this->date.tm_hour;
    120        }

    121        int DateTime::GetMinute()
    122        {
    123            return this->date.tm_min;
    124        }

    125        int DateTime::GetMonth()
    126        {
    127            return this->date.tm_mon;
    128        }

    129
    130        DateTime DateTime::GetNow()
    131        {
    132            DateTime datetime(time(0));
    133            return datetime;
    134        }

    135
    136        int DateTime::GetSecond()
    137        {
    138            return this->date.tm_sec;
    139        }

    140
    141        int DateTime::GetYear()
    142        {
    143            return this->date.tm_year+1900;
    144        }

    145
    146        void DateTime::AddYears(const time_t years)
    147        {
    148            this->date.tm_year = this->date.tm_year+years;
    149            this->seconds = mktime(&this->date);
    150        }

    151        void DateTime::AddMonths(const time_t months)
    152        {
    153            int a  =(int)((this->date.tm_mon+months)/12);
    154            
    155            this->date.tm_year = this->date.tm_year+a;
    156            this->date.tm_mon = this->date.tm_mon+(int)((this->date.tm_mon+months)%12)-1;
    157            this->seconds = mktime(&this->date);
    158        }

    159
    160        void DateTime::AddDays(const time_t days)
    161        {    
    162            this->AddHours(days*24);
    163        }

    164        void DateTime::AddHours(const time_t hours)
    165        {
    166            this->AddMinutes(hours*60);
    167        }

    168        void DateTime::AddMinutes(const time_t minutes)
    169        {
    170            this->AddSeconds(minutes *60);
    171        }

    172
    173        void DateTime::AddSeconds(const time_t seconds)
    174        {
    175            this->seconds = this->seconds+seconds;
    176            this->date = *localtime(&this->seconds);
    177        }

    178        void DateTime::AddWeeks(const time_t weeks)
    179        {
    180            this->AddDays(weeks*7);
    181        }

    182
    183
    184        int DateTime::Compare(const DateTime *t1,const DateTime *t2)
    185        {
    186            if( t1->seconds == t2->seconds)
    187                return 0;
    188            if(t1->seconds < t2->seconds)
    189                return -1;
    190            return 1;
    191
    192        }

    193
    194
    195        int DateTime::CompareTo(const Object *value)
    196        {
    197            DateTime * dateTime =  (DateTime *)value;
    198            if( dateTime->seconds == this->seconds)
    199                return 0;
    200            if(this->seconds < dateTime->seconds)
    201                return -1;
    202            return 1;
    203        }

    204
    205        int DateTime::CompareTo(const DateTime *value)
    206        {
    207            if(this->seconds == value->seconds)
    208                return 0;
    209            if(this->seconds <value->seconds)
    210                return -1;
    211            return 1;
    212        }

    213
    214
    215        std::string DateTime::ToShortDateString()
    216        {
    217            return this->ToString("%Y-%m-%d");
    218        }

    219
    220        std::string DateTime::ToString()
    221        {
    222            return this->ToString("%Y-%m-%d %H:%M:%S");
    223        }

    224        std::string DateTime::ToString(const std::string formaterStr)
    225        {
    226            //strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t)); 
    227            char s[256];
    228            strftime(s, sizeof(s), formaterStr.c_str(), &this->date);
    229            std::string str(s);
    230            return str;
    231
    232        }

    233
    234        bool DateTime::operator ==( DateTime &dateTime)
    235        {
    236            return this->Equals(&dateTime);
    237
    238        }

    239        bool DateTime::operator != (DateTime &datetime)
    240        {
    241            if(this->seconds != datetime.seconds)
    242                return true;
    243            return false;
    244        }

    245        bool DateTime::operator > (DateTime &dateTime)
    246        {
    247            if(this->seconds > dateTime.seconds)
    248                return true;
    249            return false;
    250        }

    251        bool DateTime::operator < (DateTime &datetime)
    252        {
    253            if(this->seconds <datetime.seconds)
    254                return true;
    255            return false;
    256        }

    257        bool DateTime::operator >=(DateTime &datetime)
    258        {
    259            if(this->seconds >= datetime.seconds)
    260                return true;
    261            return false;
    262        }

    263
    264        bool DateTime::operator <=(DateTime &datetime)
    265        {
    266            if(this->seconds <= datetime.seconds)
    267                return true;
    268            return false;
    269        }

    270
    271        DateTime::~DateTime(void)
    272        {
    273
    274        }

    275
    276    }

    277
    278}

    279
  • 相关阅读:
    2010上交:计算表达式
    添加子评论
    上传图片
    settings配置 文件操作
    django 操作前端数据
    静态文件配置
    render httprequest
    上传文件配置
    Django为什么要跳转到不同的页面来实现不同的功能
    定义日志器
  • 原文地址:https://www.cnblogs.com/wubiyu/p/1345369.html
Copyright © 2020-2023  润新知