1 //
2 // Date.h
3 //
4 // Library: Data
5 // Package: DataCore
6 // Module: Date
7 //
8 // Definition of the Date class.
9 //
10 // Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
11 // and Contributors.
12 //
13 // SPDX-License-Identifier: BSL-1.0
14 //
15
16
17 #ifndef Data_Date_INCLUDED
18 #define Data_Date_INCLUDED
19
20
21 #include "Poco/Data/Data.h"
22 #include "Poco/Dynamic/VarHolder.h"
23 #include "Poco/Exception.h"
24
25
26 namespace Poco {
27
28 class DateTime;
29
30 namespace Dynamic {
31
32 class Var;
33
34 }
35
36 namespace Data {
37
38
39 class Time;
40
41
42 class Data_API Date
43 /// Date class wraps a DateTime and exposes date related interface.
44 /// The purpose of this class is binding/extraction support for date fields.
45 {
46 public:
47 Date();
48 /// Creates the Date
49
50 Date(int year, int month, int day);
51 /// Creates the Date
52
53 Date(const DateTime& dt);
54 /// Creates the Date from DateTime
55
56 ~Date();
57 /// Destroys the Date.
58
59 int year() const;
60 /// Returns the year.
61
62 int month() const;
63 /// Returns the month.
64
65 int day() const;
66 /// Returns the day.
67
68 void assign(int year, int month, int day);
69 /// Assigns date.
70
71 Date& operator = (const Date& d);
72 /// Assignment operator for Date.
73
74 Date& operator = (const DateTime& dt);
75 /// Assignment operator for DateTime.
76
77 Date& operator = (const Poco::Dynamic::Var& var);
78 /// Assignment operator for Var.
79
80 bool operator == (const Date& date) const;
81 /// Equality operator.
82
83 bool operator != (const Date& date) const;
84 /// Inequality operator.
85
86 bool operator < (const Date& date) const;
87 /// Less then operator.
88
89 bool operator > (const Date& date) const;
90 /// Greater then operator.
91
92 private:
93 int _year;
94 int _month;
95 int _day;
96 };
97
98
99 //
100 // inlines
101 //
year()102 inline int Date::year() const
103 {
104 return _year;
105 }
106
107
month()108 inline int Date::month() const
109 {
110 return _month;
111 }
112
113
day()114 inline int Date::day() const
115 {
116 return _day;
117 }
118
119
120 inline Date& Date::operator = (const Date& d)
121 {
122 assign(d.year(), d.month(), d.day());
123 return *this;
124 }
125
126
127 inline Date& Date::operator = (const DateTime& dt)
128 {
129 assign(dt.year(), dt.month(), dt.day());
130 return *this;
131 }
132
133
134 inline bool Date::operator == (const Date& date) const
135 {
136 return _year == date.year() &&
137 _month == date.month() &&
138 _day == date.day();
139 }
140
141
142 inline bool Date::operator != (const Date& date) const
143 {
144 return !(*this == date);
145 }
146
147
148 inline bool Date::operator > (const Date& date) const
149 {
150 return !(*this == date) && !(*this < date);
151 }
152
153
154 } } // namespace Poco::Data
155
156
157 //
158 // VarHolderImpl<Date>
159 //
160
161
162 namespace Poco {
163 namespace Dynamic {
164
165
166 template <>
167 class VarHolderImpl<Poco::Data::Date>: public VarHolder
168 {
169 public:
VarHolderImpl(const Poco::Data::Date & val)170 VarHolderImpl(const Poco::Data::Date& val): _val(val)
171 {
172 }
173
~VarHolderImpl()174 ~VarHolderImpl()
175 {
176 }
177
type()178 const std::type_info& type() const
179 {
180 return typeid(Poco::Data::Date);
181 }
182
convert(Poco::Timestamp & val)183 void convert(Poco::Timestamp& val) const
184 {
185 DateTime dt;
186 dt.assign(_val.year(), _val.month(), _val.day());
187 val = dt.timestamp();
188 }
189
convert(Poco::DateTime & val)190 void convert(Poco::DateTime& val) const
191 {
192 val.assign(_val.year(), _val.month(), _val.day());
193 }
194
convert(Poco::LocalDateTime & val)195 void convert(Poco::LocalDateTime& val) const
196 {
197 val.assign(_val.year(), _val.month(), _val.day());
198 }
199
convert(std::string & val)200 void convert(std::string& val) const
201 {
202 DateTime dt(_val.year(), _val.month(), _val.day());
203 val = DateTimeFormatter::format(dt, "%Y/%m/%d");
204 }
205
206 VarHolder* clone(Placeholder<VarHolder>* pVarHolder = 0) const
207 {
208 return cloneHolder(pVarHolder, _val);
209 }
210
value()211 const Poco::Data::Date& value() const
212 {
213 return _val;
214 }
215
216 private:
217 VarHolderImpl();
218 Poco::Data::Date _val;
219 };
220
221
222 } } // namespace Poco::Dynamic
223
224
225 #endif // Data_Date_INCLUDED
226