Hikyuu
Datetime.h
浏览该文件的文档.
1 /*
2  * Datetime.h
3  *
4  * Created on: 2012-8-23
5  * Author: fasiondog
6  */
7 
8 #ifndef DATETIME_H_
9 #define DATETIME_H_
10 
11 #include <string>
12 #include <vector>
13 #include <boost/date_time/posix_time/posix_time.hpp>
14 
15 #if defined(BOOST_MSVC)
16 #pragma warning(disable: 4251)
17 #endif
18 
19 #ifndef HKU_API
20 #define HKU_API
21 #endif
22 
23 namespace hku {
24 
25 namespace bt = boost::posix_time;
26 namespace bd = boost::gregorian;
27 
34 public:
36  Datetime();
37 
38  Datetime(const Datetime&);
39  Datetime(int year, int month, int day,
40  int hh = 0, int mm = 0, int sec = 0);
41 
43  Datetime(const bd::date&);
44 
46  Datetime(const bt::ptime&);
47 
49  explicit Datetime(unsigned long long);
50 
52  explicit Datetime(const std::string&);
53 
54  Datetime& operator=(const Datetime&);
55 
56  int year() const;
57  int month() const;
58  int day() const;
59  int hour() const;
60  int minute() const;
61  int second() const;
62 
67  unsigned long long number() const;
68 
69  std::string toString() const;
70 
72  bt::ptime ptime() const;
73 
75  bd::date date() const;
76 
78  int dayOfWeek() const;
79 
81  int dayOfYear() const;
82 
87  Datetime dateOfWeek(int day) const;
88 
90  Datetime startOfWeek() const;
91 
93  Datetime endOfWeek() const;
94 
96  Datetime startOfMonth() const;
97 
99  Datetime endOfMonth() const;
100 
102  Datetime startOfQuarter() const;
103 
105  Datetime endOfQuarter() const;
106 
108  Datetime startOfHalfyear() const;
109 
111  Datetime endOfHalfyear() const;
112 
114  Datetime startOfYear() const;
115 
117  Datetime endOfYear() const;
118 
120  Datetime nextDay() const;
121 
123  Datetime nextWeek() const;
124 
126  Datetime nextMonth() const;
127 
129  Datetime nextQuarter() const;
130 
132  Datetime nextHalfyear() const;
133 
135  Datetime nextYear() const;
136 
138  Datetime preDay() const;
139 
141  Datetime preWeek() const;
142 
144  Datetime preMonth() const;
145 
147  Datetime preQuarter() const;
148 
150  Datetime preHalfyear() const;
151 
153  Datetime preYear() const;
154 
156  static Datetime min();
157 
159  static Datetime max();
160 
162  static Datetime now();
163 
165  static Datetime today();
166 
167 private:
168  bt::ptime m_data;
169 };
170 
171 HKU_API std::ostream & operator<<(std::ostream &, const Datetime&);
172 
177 typedef std::vector<Datetime> DatetimeList;
178 
179 
186 DatetimeList HKU_API getDateRange(const Datetime& start, const Datetime& end);
187 
188 
190 //
191 // 关系比较函数, 不直接在类中定义是为了支持 Null<>() == d,Null可以放在左边
192 //
194 bool operator==(const Datetime&, const Datetime&);
195 bool operator!=(const Datetime&, const Datetime&);
196 bool operator>(const Datetime&, const Datetime&);
197 bool operator<(const Datetime&, const Datetime&);
198 bool operator>=(const Datetime&, const Datetime&);
199 bool operator<=(const Datetime&, const Datetime&);
200 
201 inline bool operator==(const Datetime& d1, const Datetime& d2) {
202  return d1.ptime() == d2.ptime();
203 }
204 
205 inline bool operator!=(const Datetime& d1, const Datetime& d2) {
206  return d1.ptime() != d2.ptime();
207 }
208 
209 inline bool operator>(const Datetime& d1, const Datetime& d2) {
210  return d1.ptime() > d2.ptime();
211 }
212 
213 inline bool operator<(const Datetime& d1, const Datetime& d2) {
214  return d1.ptime() < d2.ptime();
215 }
216 
217 inline bool operator>=(const Datetime& d1, const Datetime& d2) {
218  return d1.ptime() >= d2.ptime();
219 }
220 
221 inline bool operator<=(const Datetime& d1, const Datetime& d2) {
222  return d1.ptime() <= d2.ptime();
223 }
224 
226 //
227 // inline 成员函数定义
228 //
230 
232  bd::date d(bd::pos_infin);
233  m_data = bt::ptime(d, bt::time_duration(0,0,0));
234 }
235 
236 inline Datetime::Datetime(const Datetime& d) {
237  m_data = d.m_data;
238 }
239 
240 inline Datetime::Datetime(const bd::date& d) {
241  m_data = bt::ptime(d, bt::time_duration(0,0,0));
242 }
243 
244 inline Datetime::Datetime(const bt::ptime& d) {
245  m_data = d;
246 }
247 
248 inline Datetime::Datetime(const std::string& ts) {
249  if (ts == "+infinity") {
250  bd::date d(bd::pos_infin);
251  m_data = bt::ptime(d, bt::time_duration(0,0,0));
252  } else {
253  m_data = bt::time_from_string(ts);
254  }
255 }
256 
257 inline Datetime::Datetime(int year, int month, int day,
258  int hh, int mm, int sec) {
259  bd::date d(year, month, day);
260  m_data = bt::ptime(d, bt::time_duration(hh, mm, sec));
261 }
262 
263 inline int Datetime::year() const {
264  return m_data.date().year();
265 }
266 
267 inline int Datetime::month() const {
268  return m_data.date().month();
269 }
270 
271 inline int Datetime::day() const {
272  return m_data.date().day();
273 }
274 
275 inline int Datetime::hour() const {
276  return int(m_data.time_of_day().hours());
277 }
278 
279 inline int Datetime::minute() const {
280  return int(m_data.time_of_day().minutes());
281 }
282 
283 inline int Datetime::second() const {
284  return int(m_data.time_of_day().seconds());
285 }
286 
287 inline bt::ptime Datetime::ptime() const {
288  return m_data;
289 }
290 
291 inline bd::date Datetime::date() const {
292  return m_data.date();
293 }
294 
295 inline int Datetime::dayOfWeek() const {
296  return date().day_of_week();
297 }
298 
299 inline int Datetime::dayOfYear() const {
300  return date().day_of_year();
301 }
302 
303 } /* namespace hku */
304 #endif /* DATETIME_H_ */
int dayOfYear() const
返回一年中的第几天,1月1日为1年中的第一天
Definition: Datetime.h:299
std::string string
Definition: DataType.h:55
#define HKU_API
Definition: Datetime.h:20
int month() const
Definition: Datetime.h:267
bd::date date() const
返回 boost::gregorian::date
Definition: Datetime.h:291
日期类型
Definition: Datetime.h:33
DatetimeList HKU_API getDateRange(const Datetime &start, const Datetime &end)
获取指定范围的日历日期列表[start, end),仅仅是日,不含时分秒
Definition: Datetime.cpp:102
bool operator!=(const Datetime &, const Datetime &)
Definition: Datetime.h:205
int second() const
Definition: Datetime.h:283
bool operator>(const Datetime &, const Datetime &)
Definition: Datetime.h:209
HKU_API std::ostream & operator<<(std::ostream &os, const Block &blk)
Definition: Block.cpp:13
bool operator==(const Datetime &, const Datetime &)
Definition: Datetime.h:201
std::vector< Datetime > DatetimeList
日期列表
Definition: Datetime.h:177
Datetime()
默认构造函数,Null<Datetime>
Definition: Datetime.h:231
int minute() const
Definition: Datetime.h:279
bt::ptime ptime() const
返回 boost::posix_time::ptime
Definition: Datetime.h:287
bool operator<(const Datetime &, const Datetime &)
Definition: Datetime.h:213
int dayOfWeek() const
返回一周中的第几天,周日为0,周一为1
Definition: Datetime.h:295
bool operator<=(const Datetime &, const Datetime &)
Definition: Datetime.h:221
Hikyuu核心命名空间,包含股票数据的管理、指标实现、交易系统框架等
Definition: Block.cpp:11
bool operator>=(const Datetime &, const Datetime &)
Definition: Datetime.h:217
int day() const
Definition: Datetime.h:271
int year() const
Definition: Datetime.h:263
int hour() const
Definition: Datetime.h:275