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