xref: /haiku/headers/os/support/DateTime.h (revision 19d8cb703c30602e188891a9a82bfabe55f690e7)
1a070cf53SStephan Aßmus /*
229e8fa59SJohn Scipione  * Copyright 2007-2010 Haiku, Inc. All rights reserved.
3a070cf53SStephan Aßmus  * Distributed under the terms of the MIT License.
4a070cf53SStephan Aßmus  */
529e8fa59SJohn Scipione #ifndef _DATE_TIME_H
629e8fa59SJohn Scipione #define _DATE_TIME_H
7a070cf53SStephan Aßmus 
8a070cf53SStephan Aßmus 
9a070cf53SStephan Aßmus #include <String.h>
10a070cf53SStephan Aßmus 
11a070cf53SStephan Aßmus 
12a070cf53SStephan Aßmus class BMessage;
13a070cf53SStephan Aßmus 
14a070cf53SStephan Aßmus 
15a070cf53SStephan Aßmus namespace BPrivate {
16a070cf53SStephan Aßmus 
17a070cf53SStephan Aßmus enum time_type {
18a070cf53SStephan Aßmus 	B_GMT_TIME,
19a070cf53SStephan Aßmus 	B_LOCAL_TIME
20a070cf53SStephan Aßmus };
21a070cf53SStephan Aßmus 
22a070cf53SStephan Aßmus 
23a070cf53SStephan Aßmus enum diff_type {
24a070cf53SStephan Aßmus 	B_HOURS_DIFF,
25a070cf53SStephan Aßmus 	B_MINUTES_DIFF,
26a070cf53SStephan Aßmus 	B_SECONDS_DIFF,
27a070cf53SStephan Aßmus 	B_MILLISECONDS_DIFF,
28a070cf53SStephan Aßmus 	B_MICROSECONDS_DIFF
29a070cf53SStephan Aßmus };
30a070cf53SStephan Aßmus 
31a070cf53SStephan Aßmus 
32a070cf53SStephan Aßmus class BTime {
33a070cf53SStephan Aßmus public:
34a070cf53SStephan Aßmus 								BTime();
35bbba047cSStephan Aßmus 								BTime(const BTime& other);
36a070cf53SStephan Aßmus 								BTime(int32 hour, int32 minute, int32 second,
37a070cf53SStephan Aßmus 									int32 microsecond = 0);
38a070cf53SStephan Aßmus 								BTime(const BMessage* archive);
39a070cf53SStephan Aßmus 								~BTime();
40a070cf53SStephan Aßmus 
41a070cf53SStephan Aßmus 			status_t			Archive(BMessage* into) const;
42a070cf53SStephan Aßmus 
43a070cf53SStephan Aßmus 			bool				IsValid() const;
44daf3c505SJérôme Duval 	static	bool				IsValid(const BTime& time);
45daf3c505SJérôme Duval 	static	bool				IsValid(int32 hour, int32 minute, int32 second,
46daf3c505SJérôme Duval 									int32 microsecond = 0);
47a070cf53SStephan Aßmus 
48a070cf53SStephan Aßmus 	static	BTime				CurrentTime(time_type type);
49a070cf53SStephan Aßmus 
50a070cf53SStephan Aßmus 			BTime				Time() const;
51a070cf53SStephan Aßmus 			bool				SetTime(const BTime& time);
52a070cf53SStephan Aßmus 			bool				SetTime(int32 hour, int32 minute, int32 second,
53a070cf53SStephan Aßmus 									int32 microsecond = 0);
54a070cf53SStephan Aßmus 
55bbba047cSStephan Aßmus 			BTime&				AddHours(int32 hours);
56bbba047cSStephan Aßmus 			BTime&				AddMinutes(int32 minutes);
57bbba047cSStephan Aßmus 			BTime&				AddSeconds(int32 seconds);
58bbba047cSStephan Aßmus 			BTime&				AddMilliseconds(int32 milliseconds);
59bbba047cSStephan Aßmus 			BTime&				AddMicroseconds(int32 microseconds);
60a070cf53SStephan Aßmus 
61a070cf53SStephan Aßmus 			int32				Hour() const;
62a070cf53SStephan Aßmus 			int32				Minute() const;
63a070cf53SStephan Aßmus 			int32				Second() const;
64a070cf53SStephan Aßmus 			int32				Millisecond() const;
65a070cf53SStephan Aßmus 			int32				Microsecond() const;
66a070cf53SStephan Aßmus 			bigtime_t			Difference(const BTime& time,
67a070cf53SStephan Aßmus 									diff_type type) const;
68a070cf53SStephan Aßmus 
69a070cf53SStephan Aßmus 			bool				operator!=(const BTime& time) const;
70a070cf53SStephan Aßmus 			bool				operator==(const BTime& time) const;
71a070cf53SStephan Aßmus 
72a070cf53SStephan Aßmus 			bool				operator<(const BTime& time) const;
73a070cf53SStephan Aßmus 			bool				operator<=(const BTime& time) const;
74a070cf53SStephan Aßmus 
75a070cf53SStephan Aßmus 			bool				operator>(const BTime& time) const;
76a070cf53SStephan Aßmus 			bool				operator>=(const BTime& time) const;
77a070cf53SStephan Aßmus 
78a070cf53SStephan Aßmus private:
79a070cf53SStephan Aßmus 			bigtime_t			_Microseconds() const;
80bbba047cSStephan Aßmus 			BTime&				_AddMicroseconds(bigtime_t microseconds);
81a070cf53SStephan Aßmus 			bool				_SetTime(bigtime_t hour, bigtime_t minute,
82a070cf53SStephan Aßmus 									bigtime_t second, bigtime_t microsecond);
83a070cf53SStephan Aßmus 
84a070cf53SStephan Aßmus private:
85a070cf53SStephan Aßmus 			bigtime_t			fMicroseconds;
86a070cf53SStephan Aßmus };
87a070cf53SStephan Aßmus 
88a070cf53SStephan Aßmus 
89a070cf53SStephan Aßmus class BDate {
90a070cf53SStephan Aßmus public:
91a070cf53SStephan Aßmus 								BDate();
92bbba047cSStephan Aßmus 								BDate(const BDate& other);
93a070cf53SStephan Aßmus 								BDate(int32 year, int32 month, int32 day);
94*19d8cb70SAxel Dörfler 								BDate(time_t time,
95*19d8cb70SAxel Dörfler 									time_type type = B_LOCAL_TIME);
96a070cf53SStephan Aßmus 								BDate(const BMessage* archive);
97a070cf53SStephan Aßmus 								~BDate();
98a070cf53SStephan Aßmus 
99a070cf53SStephan Aßmus 			status_t			Archive(BMessage* into) const;
100a070cf53SStephan Aßmus 
101a070cf53SStephan Aßmus 			bool				IsValid() const;
102daf3c505SJérôme Duval 	static	bool				IsValid(const BDate& date);
103daf3c505SJérôme Duval 	static	bool				IsValid(int32 year, int32 month,
104daf3c505SJérôme Duval 									int32 day);
105a070cf53SStephan Aßmus 
106a070cf53SStephan Aßmus 	static	BDate				CurrentDate(time_type type);
107a070cf53SStephan Aßmus 
108a070cf53SStephan Aßmus 			BDate				Date() const;
109a070cf53SStephan Aßmus 			bool				SetDate(const BDate& date);
110a070cf53SStephan Aßmus 
111a070cf53SStephan Aßmus 			bool				SetDate(int32 year, int32 month, int32 day);
112daf3c505SJérôme Duval 			void				GetDate(int32* year, int32* month,
113daf3c505SJérôme Duval 									int32* day) const;
114a070cf53SStephan Aßmus 
115a070cf53SStephan Aßmus 			void				AddDays(int32 days);
116a070cf53SStephan Aßmus 			void				AddYears(int32 years);
117a070cf53SStephan Aßmus 			void				AddMonths(int32 months);
118a070cf53SStephan Aßmus 
119a070cf53SStephan Aßmus 			int32				Day() const;
120a070cf53SStephan Aßmus 			int32				Year() const;
121a070cf53SStephan Aßmus 			int32				Month() const;
122a070cf53SStephan Aßmus 			int32				Difference(const BDate& date) const;
123a070cf53SStephan Aßmus 
124afd5ec11SAdrien Destugues 			void				SetDay(int32 day);
125afd5ec11SAdrien Destugues 			void				SetMonth(int32 month);
126afd5ec11SAdrien Destugues 			void				SetYear(int32 year);
127afd5ec11SAdrien Destugues 
128a070cf53SStephan Aßmus 			int32				DayOfWeek() const;
129a070cf53SStephan Aßmus 			int32				DayOfYear() const;
130a070cf53SStephan Aßmus 
131a070cf53SStephan Aßmus 			int32				WeekNumber() const;
132daf3c505SJérôme Duval 			bool				IsLeapYear() const;
133daf3c505SJérôme Duval 	static	bool				IsLeapYear(int32 year);
134a070cf53SStephan Aßmus 
135a070cf53SStephan Aßmus 			int32				DaysInYear() const;
136a070cf53SStephan Aßmus 			int32				DaysInMonth() const;
137a070cf53SStephan Aßmus 
138bbba047cSStephan Aßmus 			BString				ShortDayName() const;
139bbba047cSStephan Aßmus 	static	BString				ShortDayName(int32 day);
140a070cf53SStephan Aßmus 
141bbba047cSStephan Aßmus 			BString				ShortMonthName() const;
142bbba047cSStephan Aßmus 	static	BString				ShortMonthName(int32 month);
143bbba047cSStephan Aßmus 
144bbba047cSStephan Aßmus 			BString				LongDayName() const;
145bbba047cSStephan Aßmus 	static	BString				LongDayName(int32 day);
146bbba047cSStephan Aßmus 
147bbba047cSStephan Aßmus 			BString				LongMonthName() const;
148bbba047cSStephan Aßmus 	static	BString				LongMonthName(int32 month);
149a070cf53SStephan Aßmus 
150a070cf53SStephan Aßmus 			int32				DateToJulianDay() const;
151a070cf53SStephan Aßmus 	static	BDate				JulianDayToDate(int32 julianDay);
152a070cf53SStephan Aßmus 
153a070cf53SStephan Aßmus 			bool				operator!=(const BDate& date) const;
154a070cf53SStephan Aßmus 			bool				operator==(const BDate& date) const;
155a070cf53SStephan Aßmus 
156a070cf53SStephan Aßmus 			bool				operator<(const BDate& date) const;
157a070cf53SStephan Aßmus 			bool				operator<=(const BDate& date) const;
158a070cf53SStephan Aßmus 
159a070cf53SStephan Aßmus 			bool				operator>(const BDate& date) const;
160a070cf53SStephan Aßmus 			bool				operator>=(const BDate& date) const;
161a070cf53SStephan Aßmus 
162a070cf53SStephan Aßmus private:
163daf3c505SJérôme Duval 	static	int32				_DaysInMonth(int32 year, int32 month);
164a070cf53SStephan Aßmus 			bool				_SetDate(int32 year, int32 month, int32 day);
165daf3c505SJérôme Duval 	static	int32				_DateToJulianDay(int32 year, int32 month,
166daf3c505SJérôme Duval 									int32 day);
167a070cf53SStephan Aßmus 
168a070cf53SStephan Aßmus private:
169a070cf53SStephan Aßmus 			int32				fDay;
170a070cf53SStephan Aßmus 			int32				fYear;
171a070cf53SStephan Aßmus 			int32				fMonth;
172a070cf53SStephan Aßmus };
173a070cf53SStephan Aßmus 
174a070cf53SStephan Aßmus 
175a070cf53SStephan Aßmus class BDateTime {
176a070cf53SStephan Aßmus public:
177a070cf53SStephan Aßmus 								BDateTime();
178a070cf53SStephan Aßmus 								BDateTime(const BDate &date, const BTime &time);
179a070cf53SStephan Aßmus 								BDateTime(const BMessage* archive);
180a070cf53SStephan Aßmus 								~BDateTime();
181a070cf53SStephan Aßmus 
182a070cf53SStephan Aßmus 			status_t			Archive(BMessage* into) const;
183a070cf53SStephan Aßmus 
184a070cf53SStephan Aßmus 			bool				IsValid() const;
185a070cf53SStephan Aßmus 
186a070cf53SStephan Aßmus 	static	BDateTime			CurrentDateTime(time_type type);
187a070cf53SStephan Aßmus 			void				SetDateTime(const BDate &date, const BTime &time);
188a070cf53SStephan Aßmus 
189bbba047cSStephan Aßmus 			BDate&				Date();
190bbba047cSStephan Aßmus 			const BDate&		Date() const;
191a070cf53SStephan Aßmus 			void				SetDate(const BDate &date);
192a070cf53SStephan Aßmus 
193bbba047cSStephan Aßmus 			BTime&				Time();
194bbba047cSStephan Aßmus 			const BTime&		Time() const;
195a070cf53SStephan Aßmus 			void				SetTime(const BTime &time);
196a070cf53SStephan Aßmus 
197d05f9e2dSAdrien Destugues 			time_t				Time_t() const;
198d05f9e2dSAdrien Destugues 			void				SetTime_t(time_t seconds);
199a070cf53SStephan Aßmus 
200a070cf53SStephan Aßmus 			bool				operator!=(const BDateTime& dateTime) const;
201a070cf53SStephan Aßmus 			bool				operator==(const BDateTime& dateTime) const;
202a070cf53SStephan Aßmus 
203a070cf53SStephan Aßmus 			bool				operator<(const BDateTime& dateTime) const;
204a070cf53SStephan Aßmus 			bool				operator<=(const BDateTime& dateTime) const;
205a070cf53SStephan Aßmus 
206a070cf53SStephan Aßmus 			bool				operator>(const BDateTime& dateTime) const;
207a070cf53SStephan Aßmus 			bool				operator>=(const BDateTime& dateTime) const;
208a070cf53SStephan Aßmus 
209a070cf53SStephan Aßmus private:
210a070cf53SStephan Aßmus 			BDate				fDate;
211a070cf53SStephan Aßmus 			BTime				fTime;
212a070cf53SStephan Aßmus };
213a070cf53SStephan Aßmus 
214a070cf53SStephan Aßmus }	// namespace BPrivate
215a070cf53SStephan Aßmus 
216a070cf53SStephan Aßmus using BPrivate::time_type;
217a070cf53SStephan Aßmus using BPrivate::B_GMT_TIME;
218a070cf53SStephan Aßmus using BPrivate::B_LOCAL_TIME;
219a070cf53SStephan Aßmus using BPrivate::diff_type;
220a070cf53SStephan Aßmus using BPrivate::B_HOURS_DIFF;
221a070cf53SStephan Aßmus using BPrivate::B_MINUTES_DIFF;
222a070cf53SStephan Aßmus using BPrivate::B_SECONDS_DIFF;
223a070cf53SStephan Aßmus using BPrivate::B_MILLISECONDS_DIFF;
224a070cf53SStephan Aßmus using BPrivate::B_MICROSECONDS_DIFF;
225a070cf53SStephan Aßmus using BPrivate::BTime;
226a070cf53SStephan Aßmus using BPrivate::BDate;
227a070cf53SStephan Aßmus using BPrivate::BDateTime;
228a070cf53SStephan Aßmus 
229a070cf53SStephan Aßmus 
23029e8fa59SJohn Scipione #endif	// _DATE_TIME_H
231