标准C++写的DateTime对象
头文件
1
#pragma once
2
//#include <eh.h>
3
#include <windows.h>
4
#include <string>
5
#include <stdio.h>
6
#include <time.h>
7
using namespace std;
8![]()
9
namespace 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![]()
#pragma once2
//#include <eh.h>3
#include <windows.h>4
#include <string>5
#include <stdio.h>6
#include <time.h>7
using namespace std;8

9
namespace HongYing10
{11

12
namespace IO13
{14

15
class FileStream16
{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);//定位到流中指定的位置以字节为单位,成功返回 025
char * Gets(char * buffer,int maxCount) ; //从流中读一行或指定个字符 失败返回NULL26
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 File40
{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 OpenFileMode52
{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 Exception88
{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 Object110
{111
class Object112
{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 Object124
{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:00130
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:00152
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-365165
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"
3
namespace 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![]()
#include "StdAfx.h"2
#include "HongYing.h"3
namespace HongYing4
{5
namespace Object6
{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:0040
{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



浙公网安备 33010602011771号