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