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